簡介
最近公司項目需要加個小功能,就是python程序運行的時候可以通過命令行輸入參數,增加某些選項可配置的功能。在開發(fā)過程中,如果遇到希望能夠增加命令行參數這種需求,python提供了對應的庫argparse, 針對這個task做個小總結
官方文檔是這樣介紹argparse庫的。
The argparse module makes it easy to write user-friendly command-line interfaces. The program defines what arguments it requires, and argparse will figure out how to parse those out of sys.argv. The argparse module also automatically generates help and usage messages and issues errors when users give the program invalid arguments.
可以看到,argparse庫提供了可選和必選參數的設置,而且還可以自動生成help和usage的文檔并且還提供錯誤解答,可以說是非常友好了。
argparse的常用API有如下幾個:
1.parser = argparse.ArgumentParser() #創(chuàng)建一個解析器
2.parser.add_argument()#增加命令行參數和選項
3.parser.parse_args()#解析命令行參數
creating a parser
官方定義:
class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True)
是不是有點眼花了,其實這么多參數,基本都用不到。就記住description是用來描述輸入-h或者--help時顯示的文字就行了
Adding arguments
ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
又是一堆參數,我也很煩,這么多參數看著都頭大, 其實一般常用的也就幾個。 但是閱讀官方文檔是程序員必備的一種能力,所以要注意刻意練習鍛煉自己的閱讀能力。
name or flags 必須的參數,分選項參數和位置參數。選項參數類似于--para,位置參數可以是文件名,例如parser.add_argument('filename')
action 表示參數應該如何被處理
nargs 表示填寫的參數后面跟幾個取值。
-
const 用來存儲常量值,最常用的兩種情況就是:
- 當action='store_const'或append_const的時候,參數的取值就從const里面讀取
- 當增加可選參數并且nargs='?'的時候,解析的時候參數會取const的值
default表示選項參數的默認值(
常用
)type表示參數類型
choice 表示參數的取值范圍
required一般是用來表示選項參數是否在輸入的時候必須填寫(
常用
)help表示輸入
-h
的時候顯示該參數的提示信息(常用
)metavar 表示參數在usage里面顯示的名字
dest 表示指定參數為另外一個名字
Parsing arguments
ArgumentParser.parse_args(args=None, namespace=None)
最后這個就比較簡單了,總共兩個參數。
- args 表示要解析的字符串列表,默認是從sys.argv來的
- namespace 表示對象可取的屬性值。默認為空。
說這么多沒用,做起來才有用,廢話不多說,我們來舉個??:
import argparseparser = argparse.ArgumentParser('introduce how to use')#創(chuàng)建一個解析器
parser.add_argument('integers', #必選參數
metavar='number', #'usage'顯示成'number'
type=int, #整形變量
nargs='+', #至少有一個參數值
help='an inter for the accumulator')#幫助文檔顯示
parser.add_argument('--test-para',#可選參數
required=False,#是否必須攜帶
default='this is just a test',#默認值
help='wirte some instruction here')#幫助文檔
args = parser.parse_args()#解析
print(args)
運行python3 intro_parse.py -h結果如下:
可以看到我們增加的number和--test-para都已經正確顯示出來了。
再運行python3 intro_prase.py 8, 并沒有攜帶--test-para,結果如下:
由于篇幅以及時間匆忙,沒有做深入的研究,感興趣的同學可以根據官方文檔詳細的嘗試一下,多干而不是多看,做技術嘛,切忌眼高手低。
最后還是老樣子,如果大家喜歡并認可我,請點個贊,順手關注一下我的公眾號:Morgan的小屋,關注于自我管理和知識學習方面,感謝大家的支持與鼓勵,我會一直堅持寫下去的。