python命令行參數解析庫

簡介

最近公司項目需要加個小功能,就是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 用來存儲常量值,最常用的兩種情況就是:

    1. 當action='store_const'或append_const的時候,參數的取值就從const里面讀取
    2. 當增加可選參數并且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結果如下:

image

可以看到我們增加的number和--test-para都已經正確顯示出來了。
再運行python3 intro_prase.py 8, 并沒有攜帶--test-para,結果如下:

由于篇幅以及時間匆忙,沒有做深入的研究,感興趣的同學可以根據官方文檔詳細的嘗試一下,多干而不是多看,做技術嘛,切忌眼高手低。

最后還是老樣子,如果大家喜歡并認可我,請點個贊,順手關注一下我的公眾號:Morgan的小屋,關注于自我管理和知識學習方面,感謝大家的支持與鼓勵,我會一直堅持寫下去的。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,480評論 2 379

推薦閱讀更多精彩內容

  • Python作為網紅腳本語言,不少開發(fā)者都會選擇它來完成一些日常工作,提高效率,特別是在Python2.4以后推出...
    Neo_joke閱讀 6,236評論 0 4
  • getopt:和C中的getopt()等價。optparse:2.7后已不推薦使用。argparse:基于optp...
    顧慎為閱讀 8,723評論 1 10
  • 對CLI程序來說,參數解析大概是一個首要的問題。 當然,也有例外。 無參數腳本 許多常用命令,不需要輸入參數,就可...
    匿蟒閱讀 10,168評論 1 5
  • sys.argv sys.argv[0]是腳本文件的名字,如:test.py sys.argv[1:]是以空格分割...
    f9f73935e28c閱讀 21,150評論 0 0
  • 不要單單滿足于聽別人的故事 不要單單滿足于知道 發(fā)生在別人身上的事 展開你自己的神話 每個人都該明白這句話的意義 ...
    XXKY閱讀 567評論 3 26