Python自定義命令行參數(shù)選項(xiàng)和解析器
Python自定義命令行參數(shù)
使用到的方法為 argparse.ArgumentParser() ,此模塊有中文文檔,建議鏈接 到官方中文文檔中查看。
argparse.ArgumentParser()
此模塊可以讓人輕松編寫(xiě)用戶(hù)友好的命令行接口。程序定義它需要的參數(shù),然后 argparse 將弄清如何從 sys.argv 解析出那些參數(shù)。 argparse 模塊還會(huì)自動(dòng)生成幫助和使用手冊(cè)「常見(jiàn)的-h」,并在用戶(hù)給程序傳入無(wú)效參數(shù)時(shí)報(bào)出錯(cuò)誤信息。
使用流程
1、創(chuàng)建一個(gè)解析器:
第一步:創(chuàng)建一個(gè) ArgumentParser 對(duì)象:
parser = argparse.ArgumentParser(description='Process some integers.')
ArgumentParser 對(duì)象包含將命令行解析成 Python 數(shù)據(jù)類(lèi)型所需的全部信息。 備注:想知道具體信息可點(diǎn)擊類(lèi),查看其中的源碼
2、添加參數(shù):
ArgumentParser 對(duì)象添加參數(shù)的方法為:add_argument()
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)') 調(diào)用 parse_args() 將返回一個(gè)具有integers和 accumulate 屬性的對(duì)象,integers 屬性將是一個(gè)包含一個(gè)或多個(gè)整數(shù)的列表。而accumulate屬性,當(dāng)傳遞的參數(shù)為–sum時(shí),則是求和「sum() 函數(shù)」,當(dāng)不傳參時(shí),默認(rèn)求最大值「max()函數(shù)」
3、解析參數(shù):
ArgumentParser 對(duì)象通過(guò) parse_args() 方法解析參數(shù),它將檢查命令行,把每個(gè)參數(shù)轉(zhuǎn)換為適當(dāng)?shù)念?lèi)型然后調(diào)用相應(yīng)的操作。
parser.parse_args([’–sum’, ‘7’, ‘-1’, ‘42’]) 返回為:Namespace(accumulate=, integers=[7, -1, 42])
上面是官網(wǎng)的例子,其實(shí)簡(jiǎn)而言之就四個(gè)步驟:
1、導(dǎo)入模塊
import argparse
2、創(chuàng)建對(duì)象
parser = argparse.ArgumentParser(description='描述', usage = "傳參提示")
3、添加對(duì)象屬性
parser.add_argument()
4、解析參數(shù)
parser.parse_args() 或者 parser.parse_known_args()
下面的內(nèi)容會(huì)講到這兩者的區(qū)別
至于具體的參數(shù)怎么使用,建議參考官網(wǎng),本人還未參透所有參數(shù),(。?_?。)?I’m sorry~,不過(guò)已夠工作使用,待日后慢慢補(bǔ)充。
工作中的使用:
先上代碼,下面有具體的代碼解析,研究透這些,就夠日?;臼褂昧?/strong>
import argparse
parser = argparse.ArgumentParser()
def arg_parser():
parser = argparse.ArgumentParser(
usage="usage: %(prog)s [參數(shù)名] [參數(shù)值]"
)
parser.add_argument(
"--welcome", help="是否展示歡迎詞", action='store_true'
)
parser.add_argument(
"--login", help="是否登錄", action='store_true', default=True
)
parser.add_argument(
"--login_token", help="登錄參數(shù)", default=None, type=str
)
model_name = parser.add_argument_group("Model", "使用什么模型處理數(shù)據(jù)?")
model_name.add_argument(
"--knn", help="使用KNN方法",
type=str, default=None
)
model_name.add_argument(
"--tree", help="使用決策樹(shù)方法",
type=str, default=None
)
return parser
def argument_parser() -> argparse.ArgumentParser:
"""
Construct an return an `argparse.ArgumentParser` instance
"""
return arg_parser()
if __name__ == '__main__':
parser = argument_parser()
options, argv_rest = parser.parse_known_args()
if options.knn is not None:
argv_rest = ["-knn", options.knn] + argv_rest
if options.login_token is not None:
print('login_token參數(shù)為:', options.login_token)
options = options
arguments = argv_rest
print('options為:', options, '\n', "arguments為:", arguments)第7行:定義parser,參數(shù)中的usage是介紹使用參數(shù)的格式,用于用戶(hù)在運(yùn)行 -h 時(shí)展示提示信息。如下圖所示:

第10、14行:給parser添加屬性,重點(diǎn)介紹 action 這個(gè)參數(shù)
相同點(diǎn):
第10行和第14行均是action = ‘store_true’,此參數(shù)用于布爾類(lèi)型的參數(shù)
區(qū)別:
第10行中,當(dāng)命令行中觸發(fā)welcome參數(shù)時(shí),返回為T(mén)rue,沒(méi)有觸發(fā)的時(shí)候返回False。 第14行中,當(dāng)命令行中觸發(fā)login參數(shù)時(shí),返回為T(mén)rue,沒(méi)有觸發(fā)的時(shí)候取默認(rèn)值返回仍為T(mén)rue。也就是說(shuō),傳不傳login參數(shù),返回的都是True,這就是default參數(shù)的作用。
第16行:
新增login_token參數(shù),傳入登錄參數(shù)token,限制token類(lèi)型為str,默認(rèn)為None
提醒一句,這個(gè)type不要和action結(jié)合使用,action返回的只有布爾類(lèi)型,注意參數(shù)名字大小寫(xiě)是不同的。
第20行: add_argument_group(title=None, description=None)方法:
官方解釋?zhuān)?/p>
add_argument_group() 方法返回一個(gè)具有 add_argument() 方法的參數(shù)分組對(duì)象,這與常規(guī)的ArgumentParser一樣。當(dāng)一個(gè)參數(shù)被加入分組時(shí),解析器會(huì)將它視為一個(gè)正常的參數(shù),但是會(huì)在不同的幫助消息分組中顯示該參數(shù)。 add_argument_group()方法接受 title 和 description 參數(shù),它們可被用來(lái)定制顯示內(nèi)容
是不是有點(diǎn)迷糊, 其實(shí)就是自定義一個(gè)參數(shù)分組,如下圖所示:

第41行: parser.parse_known_args() 和 parser.parse_args() 的區(qū)別
options用來(lái)接收命令行中已定義了參數(shù)的信息
argv_rest 接收在命令中未被定義的信息
作用:有時(shí)一個(gè)腳本可能只解析部分命令行參數(shù),而將其余的參數(shù)繼續(xù)傳遞給另一個(gè)腳本或程序,它的作用方式很類(lèi)似 parse_args() 但區(qū)別在于當(dāng)存在額外參數(shù)時(shí)它不會(huì)產(chǎn)生錯(cuò)誤,額外的參數(shù)被argv_rest給接收了。
使用:好比在PyQt中,像定義style這種,就可將參數(shù)賦給argv_rest,然后讓系統(tǒng)「QApplication」去處理此參數(shù)
第42行:
假如當(dāng)命令行中的參數(shù)中有knn這個(gè)參數(shù),而這個(gè)參數(shù)我想交給系統(tǒng)去處理,所以我就把它添加到argv_rest之中,將這種參數(shù),統(tǒng)一交給系統(tǒng)處理
第45行:
傳入的參數(shù)中存在login_token,對(duì)login_token進(jìn)行單獨(dú)處理。
到此這篇關(guān)于Python自定義命令行參數(shù)選項(xiàng)和解析器的文章就介紹到這了,更多相關(guān)Python自定義命令行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)Mysql數(shù)據(jù)統(tǒng)計(jì)及numpy統(tǒng)計(jì)函數(shù)
這篇文章主要介紹了Python實(shí)現(xiàn)Mysql數(shù)據(jù)統(tǒng)計(jì)的實(shí)例代碼,給大家介紹了Python數(shù)據(jù)分析numpy統(tǒng)計(jì)函數(shù)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
布同 統(tǒng)計(jì)英文單詞的個(gè)數(shù)的python代碼
最近需要翻譯英文文章,所以需要統(tǒng)計(jì)單詞個(gè)數(shù)。索性寫(xiě)了一段代碼在此,可以簡(jiǎn)單的統(tǒng)計(jì)單詞的個(gè)數(shù)2011-03-03
樸素貝葉斯分類(lèi)算法原理與Python實(shí)現(xiàn)與使用方法案例
這篇文章主要介紹了樸素貝葉斯分類(lèi)算法原理與Python實(shí)現(xiàn)與使用方法,結(jié)合具體實(shí)例形式分析了樸素貝葉斯分類(lèi)算法的概念、原理、實(shí)現(xiàn)流程與相關(guān)操作技巧,需要的朋友可以參考下2018-06-06
python實(shí)現(xiàn) 獲取b站主播直播間 粉絲牌信息的方法
這篇文章主要介紹了python實(shí)現(xiàn) 獲取b站主播直播間粉絲牌信息 ,用于實(shí)現(xiàn)通過(guò)牌子逆向查主播信息這個(gè)功能,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
python實(shí)現(xiàn)經(jīng)緯度采樣的示例代碼
這篇文章主要介紹了python實(shí)現(xiàn)經(jīng)緯度采樣的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
python基于itchat實(shí)現(xiàn)微信群消息同步機(jī)器人
本篇文章主要介紹了python基于itchat實(shí)現(xiàn)微信群消息同步機(jī)器人,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
Python實(shí)現(xiàn)平行坐標(biāo)圖的繪制(plotly)方式
今天小編就為大家分享一篇Python實(shí)現(xiàn)平行坐標(biāo)圖的繪制(plotly)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
Python3讀寫(xiě)Excel文件(使用xlrd,xlsxwriter,openpyxl3種方式讀寫(xiě)實(shí)例與優(yōu)劣)
這篇文章主要介紹了Python3讀寫(xiě)Excel文件,使用xlrd,xlsxwriter,openpyxl3種方式讀寫(xiě)實(shí)例與優(yōu)劣,需要的朋友可以參考下2020-02-02

