argparse模塊使用

記錄學(xué)習(xí)argparse模塊的一個(gè)產(chǎn)出盲泛,也防止自己忘記,多看看惯殊,溫故而知新诱咏。
下面分三個(gè)方面來講:定位參數(shù),可選參數(shù)以及add_argumentparser的參數(shù)使用既绕,所有記錄都配上最簡單的例子啄刹,更容易理解

  1. 定位參數(shù)
import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('str')
args = parser.parse_args()
print(args)
image.png

在命令窗口下執(zhí)行,參數(shù)選擇-h凄贩,會(huì)打印出str是定位參數(shù)誓军,-h是可選參數(shù),因此這里只帶上-h的參數(shù)是達(dá)不到代碼的目的疲扎,所以需要將str的值傳進(jìn)去昵时,如下圖捷雕,這里將兩個(gè)參數(shù)都帶上,可以看到str的值被打印壹甥,并且help信息也被打印救巷。但其實(shí)-h是默認(rèn)的可選參數(shù),我們使用的時(shí)候可以不帶句柠。


image.png

以上代碼就是定位參數(shù)的簡單使用

  1. 可選參數(shù)
import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('str')
parser.add_argument('-n')
args = parser.parse_args()
print(args)
print(args.n)

執(zhí)行argparse_use.py如下浦译,能看出如果不傳入n的值,默認(rèn)打印none溯职,所以可選參數(shù)的含義顧名思義精盅。


image.png

很多代碼中能看到parser.add_argument('-n', '--name')代碼中添加可選參數(shù)name,那n和name是什么關(guān)系缸榄,應(yīng)該怎么使用渤弛?這個(gè)比較簡單:如果n和name同時(shí)存在,那么在命令行中傳參的時(shí)候可以用n或者name甚带,但是代碼中調(diào)用的話只能用name她肯,比如說打印時(shí)需要修改成print(args.name)

其實(shí)大部分代碼都沒有那么簡單,add_argument這個(gè)函數(shù)的參數(shù)比較多鹰贵,以上是最簡單的使用方法晴氨,接下來會(huì)以最簡單的方式說明這個(gè)函數(shù)的用法。

  1. add_ArgumentParse
    name or flag: 定位參數(shù)和可選參數(shù)的名稱碉输,注意如果-n和–name同時(shí)出現(xiàn)籽前,則認(rèn)為name為可選參數(shù)名稱。-n是–name的簡寫敷钾,因此解析時(shí)必須用全稱枝哄,但命令行執(zhí)行時(shí)簡稱、全稱都可以阻荒。這里的解析我理解成在代碼中調(diào)用挠锥,比如說args.name,命令執(zhí)行就是說在命令窗口輸入?yún)?shù)值的時(shí)候侨赡,比如上面的python argparse_use.py “I am the string” –n “Lisa”(這個(gè)上面已經(jīng)說到了)
    下面看個(gè)簡單例子:
import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('str')
parser.add_argument('-n', '--name')
args = parser.parse_args()
print(args)
print(args.name)

add_argument中多加一個(gè)—name蓖租,咱們來執(zhí)行看看,


image.png

可以看到,在命令行里傳參用-n或者—name都行羊壹。另外蓖宦,在代碼里調(diào)用參數(shù)只能用name哦,可以嘗試將以上代碼最后一個(gè)打印修改成print(args.n)油猫,看看會(huì)出現(xiàn)什么結(jié)果稠茂!
default:對于可選參數(shù),如果命令行執(zhí)行時(shí)未指明可選參數(shù)的值情妖,則可選參數(shù)默認(rèn)為default的值主慰;如果命令行指定可選參數(shù)值嚣州,則可選參數(shù)即命令行指定的值。對于定位參數(shù)不適用共螺。
看明白了上面的,這個(gè)就很容易懂了情竹,還是舉個(gè)例子,
import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('str')
parser.add_argument('-n', '--name', default="Bob")
args = parser.parse_args()
print(args)
print(args.name)
help:無論可選參數(shù)還是定位參數(shù)藐不,都是在命令行執(zhí)行–help時(shí)顯示的提示內(nèi)容。
這個(gè)前面的例子中已經(jīng)用過了秦效。
type:指定傳入?yún)?shù)的類型雏蛮。在命令行執(zhí)行時(shí)傳入的參數(shù)也必須是type指定的類型。如果不寫阱州,則命令行傳入的參數(shù)無論寫2還是a都默認(rèn)為string挑秉。參數(shù)解析時(shí)會(huì)自動(dòng)將2和a轉(zhuǎn)換成string
還是拿剛剛那個(gè)例子來執(zhí)行,


image.png

添加一個(gè)int參數(shù)看看
import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('str')
parser.add_argument('-n', '--name', default="Bob")
parser.add_argument('-a', '--age', type=int)
args = parser.parse_args()
print(args)
print(args.name)
print(args.age/2)
image.png

nargs:
1) ‘*’:所有當(dāng)前命令行參數(shù)被聚集到一個(gè)列表中(定位參數(shù)一個(gè)列表苔货,可選參數(shù)一個(gè)列表)通過 nargs=’*'來實(shí)現(xiàn)多個(gè)位置參數(shù)通常沒有意義犀概,但是多個(gè)選項(xiàng)是可能的

import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('str', nargs='*')
parser.add_argument('-n', nargs='*')
args = parser.parse_args()
print(args)
print(args.n)
image.png

2) '+'和 ‘*’ 類似,所有當(dāng)前命令行參數(shù)被聚集到一個(gè)列表中夜惭。另外姻灶,如果定位參數(shù)在命令行沒有參數(shù)會(huì)產(chǎn)生一個(gè)錯(cuò)誤信息。當(dāng)“*”時(shí)诈茧,命令行沒有任何定位參數(shù)产喉,結(jié)果為一空列表;當(dāng)+時(shí)敢会,命令行沒有任何定位參數(shù)會(huì)報(bào)錯(cuò)曾沈。對于可選參數(shù),無論“*”還是“+”鸥昏,命令行沒有任何參數(shù)都是None塞俱,或者default指定的值。這個(gè)與我們的理解應(yīng)該是一致的互广。下面的例子能說明這些問題敛腌。

import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('str', nargs='*')
parser.add_argument('char', nargs='+')
parser.add_argument('-n', nargs='*')
parser.add_argument('-a', nargs='+')
args = parser.parse_args()
print(args.str)
print(args.char)
print(args.n)
print(args.a) 
image.png

3) N:(一個(gè)整數(shù))。命令行中的 N 個(gè)參數(shù)會(huì)被聚集到一個(gè)列表中

import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('str', nargs=1)
parser.add_argument('char', nargs=2)
parser.add_argument('-n', nargs='*')
parser.add_argument('-a', nargs='+')
args = parser.parse_args()
print(args.str)
print(args.char)
print(args.n)
print(args.a)
image.png

上面多加了str4參數(shù)惫皱,代碼就報(bào)錯(cuò)了像樊,因?yàn)閟tr4已經(jīng)不能被分配了。

choice:用于界定參數(shù)的取值范圍旅敷。下例中生棍,age的范圍是25-35,傳入10這個(gè)值就會(huì)報(bào)錯(cuò)

import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('-a', '--age', type=int, choices=range(25,35))
args = parser.parse_args()
print(args.age)
image.png

dest: parse_arg()之后add_argument中返回的變量名稱媳谁。如下例涂滴,對于可選參數(shù)友酱,首先指定可選參數(shù)名為-s,parse_arg()之后柔纵,可選參數(shù)的名稱就會(huì)變?yōu)閟ex(此時(shí)嘗試將print(args.sex)修改成print(args.s)缔杉,執(zhí)行時(shí)會(huì)報(bào)錯(cuò)),故下面使用時(shí)為args.sex搁料。在命令窗口傳參時(shí)不能使用sex或详,執(zhí)行情況如下。

import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('-a', '--age', type=int)
parser.add_argument('-s', dest='sex')
args = parser.parse_args()
print(args.age)
print(args.sex)
image.png

required:用來設(shè)置必選參數(shù)郭计,設(shè)定后在命令行不使用會(huì)報(bào)錯(cuò)霸琴。以下代碼-a就必須傳參,否則會(huì)報(bào)錯(cuò)昭伸。

import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('-a', '--age', type=int, required=True)
parser.add_argument('-s', dest='sex')
args = parser.parse_args()
print(args.age)
print(args.sex)
image.png

metavar:在命令行所接參數(shù)的樣式的示例梧乘。初看這句話不是很明白,操作一遍就知道了庐杨。

import argparse
parser = argparse.ArgumentParser(description = "I am a test")
parser.add_argument('-s', dest='sex', metavar='FEMALE')
args = parser.parse_args()
print(args.sex)
image.png

輸入-h參數(shù)會(huì)顯示-s后面輸入的參數(shù)形式可以類似與FEMALE這樣选调,所以對于初次使用這個(gè)代碼的人來說,能夠幫助他們知道-s可以輸入什么類型的參數(shù)辑莫。

const:是針對于action中的’store_const’與’append_const’而出現(xiàn)学歧。其實(shí)對于那些需要接值的參數(shù),預(yù)先存儲(chǔ)一個(gè)值各吨,如果沒有則取用這個(gè)值

action:用來給ArgumenParser對象判斷如何處理命令行參數(shù)支持的操作如下:

1) ‘store’ - 默認(rèn)的操作枝笨,用來存儲(chǔ)參數(shù)的值。
2) ‘store_const’ - 適用于可選參數(shù)optional arguments揭蜒,用來存儲(chǔ)const關(guān)鍵字指定的值横浑。如下例,對于可選參數(shù)屉更,s存儲(chǔ)的值為female徙融,默認(rèn)為1,在命令行執(zhí)行時(shí)瑰谜,如果不寫–s則為默認(rèn)的1欺冀,如果寫上–s,則表示調(diào)用–s存儲(chǔ)的female萨脑,這時(shí)只需寫–s表示調(diào)用隐轩,后不跟任何參數(shù)。對于定位參數(shù)渤早,命令行執(zhí)行時(shí)什么都不寫职车,會(huì)自動(dòng)調(diào)用I am the string,因此default=you are right在這里無用。注意悴灵,這里const后接的值就代表了類型扛芽,如1表示int,如果是‘1’則表示string积瞒,無需再指定type川尖。

import argparse
parser = argparse.ArgumentParser(description = "I am a test")
parser.add_argument('str', action='store_const', const='i am the string', default='you are right')
parser.add_argument('-s', action='store_const', const='female', default=1)
args = parser.parse_args()
print(args.str)
print(args.s)
image.png

3) append:存儲(chǔ)一個(gè)列表,并且將每個(gè)參數(shù)值追加到列表中赡鲜。在允許多次使用選項(xiàng)時(shí)很有用空厌,僅適用于可選參數(shù)。

import argparse
parser = argparse.ArgumentParser(description = "I am a test")
parser.add_argument('-s', action='append')
args = parser.parse_args()
print(args.s)
image.png

4) append_const: 與store_const方法類似银酬,只是這里的const值被放到一個(gè)列表里。

import argparse
parser = argparse.ArgumentParser(description = "I am a test")
parser.add_argument('str', action='append_const', const='i am the string')
parser.add_argument('-s', action='append_const', const='female')
args = parser.parse_args()
print(args.str)
print(args.s)
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末筐钟,一起剝皮案震驚了整個(gè)濱河市揩瞪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌篓冲,老刑警劉巖李破,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異壹将,居然都是意外死亡嗤攻,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門诽俯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妇菱,“玉大人,你說我怎么就攤上這事暴区〈惩牛” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵仙粱,是天一觀的道長房交。 經(jīng)常有香客問我,道長伐割,這世上最難降的妖魔是什么候味? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮隔心,結(jié)果婚禮上白群,老公的妹妹穿的比我還像新娘。我一直安慰自己济炎,他們只是感情好川抡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般崖堤。 火紅的嫁衣襯著肌膚如雪侍咱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天密幔,我揣著相機(jī)與錄音楔脯,去河邊找鬼。 笑死胯甩,一個(gè)胖子當(dāng)著我的面吹牛昧廷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播偎箫,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼木柬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了淹办?” 一聲冷哼從身側(cè)響起眉枕,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怜森,沒想到半個(gè)月后速挑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡副硅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年姥宝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恐疲。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腊满,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出流纹,到底是詐尸還是另有隱情糜烹,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布漱凝,位于F島的核電站疮蹦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏茸炒。R本人自食惡果不足惜愕乎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望壁公。 院中可真熱鬧感论,春花似錦、人聲如沸紊册。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至芳绩,卻和暖如春掀亥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背妥色。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工搪花, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嘹害。 一個(gè)月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓撮竿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親笔呀。 傳聞我的和親對象是個(gè)殘疾皇子幢踏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容