Python自定義命令行參數(shù)選項和解析器
Python自定義命令行參數(shù)
使用到的方法為 argparse.ArgumentParser() ,此模塊有中文文檔,建議鏈接 到官方中文文檔中查看。
argparse.ArgumentParser()
此模塊可以讓人輕松編寫用戶友好的命令行接口。程序定義它需要的參數(shù),然后 argparse
將弄清如何從 sys.argv
解析出那些參數(shù)。 argparse
模塊還會自動生成幫助和使用手冊「常見的-h」,并在用戶給程序傳入無效參數(shù)時報出錯誤信息。
使用流程
1、創(chuàng)建一個解析器:
第一步:創(chuàng)建一個 ArgumentParser
對象:
parser = argparse.ArgumentParser(description='Process some integers.')
ArgumentParser
對象包含將命令行解析成 Python 數(shù)據(jù)類型所需的全部信息。 備注:想知道具體信息可點擊類,查看其中的源碼
2、添加參數(shù):
ArgumentParser 對象添加參數(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() 將返回一個具有integers和 accumulate 屬性的對象,integers 屬性將是一個包含一個或多個整數(shù)的列表。而accumulate屬性,當傳遞的參數(shù)為–sum時,則是求和「sum() 函數(shù)」,當不傳參時,默認求最大值「max()函數(shù)」
3、解析參數(shù):
ArgumentParser 對象通過 parse_args() 方法解析參數(shù),它將檢查命令行,把每個參數(shù)轉換為適當?shù)念愋腿缓笳{(diào)用相應的操作。
parser.parse_args([’–sum’, ‘7’, ‘-1’, ‘42’]) 返回為:Namespace(accumulate=, integers=[7, -1, 42])
上面是官網(wǎng)的例子,其實簡而言之就四個步驟:
1、導入模塊
import argparse
2、創(chuàng)建對象
parser = argparse.ArgumentParser(description='描述', usage = "傳參提示")
3、添加對象屬性
parser.add_argument()
4、解析參數(shù)
parser.parse_args() 或者 parser.parse_known_args()
下面的內(nèi)容會講到這兩者的區(qū)別
至于具體的參數(shù)怎么使用,建議參考官網(wǎng)
,本人還未參透所有參數(shù),(。?_?。)?I’m sorry~,不過已夠工作使用,待日后慢慢補充。
工作中的使用:
先上代碼,下面有具體的代碼解析,研究透這些,就夠日?;臼褂昧?/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="使用決策樹方法", 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 時展示提示信息。如下圖所示:
第10、14行:給parser添加屬性,重點介紹 action 這個參數(shù)
相同點:
第10行和第14行均是action = ‘store_true’,此參數(shù)用于布爾類型的參數(shù)
區(qū)別:
第10行中,當命令行中觸發(fā)welcome參數(shù)時,返回為True,沒有觸發(fā)的時候返回False。 第14行中,當命令行中觸發(fā)login參數(shù)時,返回為True,沒有觸發(fā)的時候取默認值返回仍為True。也就是說,傳不傳login參數(shù),返回的都是True,這就是default參數(shù)的作用。
第16行:
新增login_token參數(shù),傳入登錄參數(shù)token,限制token類型為str,默認為None
提醒一句,這個type不要和action結合使用,action返回的只有布爾類型,注意參數(shù)名字大小寫是不同的。
第20行: add_argument_group(title=None, description=None)方法:
官方解釋:
add_argument_group() 方法返回一個具有 add_argument() 方法的參數(shù)分組對象,這與常規(guī)的ArgumentParser一樣。當一個參數(shù)被加入分組時,解析器會將它視為一個正常的參數(shù),但是會在不同的幫助消息分組中顯示該參數(shù)。 add_argument_group()方法接受 title 和 description 參數(shù),它們可被用來定制顯示內(nèi)容
是不是有點迷糊, 其實就是自定義一個參數(shù)分組,如下圖所示:
第41行: parser.parse_known_args() 和 parser.parse_args() 的區(qū)別
options用來接收命令行中已定義了參數(shù)的信息
argv_rest 接收在命令中未被定義的信息
作用:有時一個腳本可能只解析部分命令行參數(shù),而將其余的參數(shù)繼續(xù)傳遞給另一個腳本或程序,它的作用方式很類似 parse_args() 但區(qū)別在于當存在額外參數(shù)時它不會產(chǎn)生錯誤,額外的參數(shù)被argv_rest給接收了。
使用:好比在PyQt中,像定義style這種,就可將參數(shù)賦給argv_rest,然后讓系統(tǒng)「QApplication」去處理此參數(shù)
第42行:
假如當命令行中的參數(shù)中有knn這個參數(shù),而這個參數(shù)我想交給系統(tǒng)去處理,所以我就把它添加到argv_rest之中,將這種參數(shù),統(tǒng)一交給系統(tǒng)處理
第45行:
傳入的參數(shù)中存在login_token,對login_token進行單獨處理。
到此這篇關于Python自定義命令行參數(shù)選項和解析器的文章就介紹到這了,更多相關Python自定義命令行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
opencv resize圖片為正方形尺寸的實現(xiàn)方法
這篇文章主要介紹了opencv resize圖片為正方形尺寸的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12如何在Win10系統(tǒng)使用Python3連接Hive
這篇文章主要介紹了如何在Win10系統(tǒng)使用Python3連接Hive,幫助大家更好的利用python讀取數(shù)據(jù),進行探索、分析和挖掘工作。感興趣的朋友可以了解下2020-10-10