Python命令行參數(shù)解析包argparse的使用詳解
一、argparse簡(jiǎn)介
argparse 是 python 自帶的命令行參數(shù)解析包,可以用來(lái)方便的服務(wù)命令行參數(shù),使用之前需要先導(dǎo)入包 import argparse
二、簡(jiǎn)單案例
簡(jiǎn)單使用,創(chuàng)建一個(gè)名為test.py的文件
# 導(dǎo)入 argparse 模塊 import argparse # 創(chuàng)建一個(gè)argparse 的對(duì)象 parser = argparse.ArgumentParser() # 添加一個(gè)接收參數(shù),默認(rèn)值為Se7eN parser.add_argument("-n", "--name", default="Se7eN") # 獲取對(duì)應(yīng)的參數(shù)的值 args = parser.parse_args() # 控制臺(tái)打印出來(lái)接收到的值 print("args = {}".format(args))
打印結(jié)果為:
houlei@houleideMacBook-Pro argparse_demo % python3 test.py # 此時(shí)在test.py后面沒(méi)有跟上參數(shù), args = Namespace(name='Se7eN') # 所以打印出來(lái)的name為默認(rèn)值 Se7eN
再次驗(yàn)證:
houlei@houleideMacBook-Pro argparse_demo % python3 test.py -n HOU # 此時(shí)后面跟上了 -n 參數(shù),并且賦值HOU args = Namespace(name='HOU') # 打印出來(lái) name 的值為 HOU houlei@houleideMacBook-Pro argparse_demo % python3 test.py --name hou # 此時(shí)后面跟上了 --name 參數(shù),并賦值為hou args = Namespace(name='hou') # 打印出來(lái)的 name 的值為 hou houlei@houleideMacBook-Pro argparse_demo %
解釋說(shuō)明
在上述代碼 parser.add_argument("-n", "--name", default="Se7eN") 中,有兩個(gè)參數(shù) “-n”和“--name” 分別代表什么?其中-n 和 --name 都是我們自己自定的參數(shù)名。至于n和name ,你可以隨便起個(gè)變量名都可以,但是要注意,前面的一個(gè) “-”和“--”才是關(guān)鍵。
一個(gè)“-”的參數(shù),例如:-n, 他其實(shí)相當(dāng)于我們?cè)趌iunx中使用的指令,一個(gè)自定義的指令。
兩個(gè)“--”的參數(shù),例如:--name 他就相當(dāng)于在程序中,用來(lái)接收對(duì)對(duì)應(yīng)指令值的變量,例如我們?cè)诳刂婆_(tái)上輸入 python3 test.py -n hou。 其中 -n 就代表使用的 -n 的指令,然后將后面的 hou 的值賦值給對(duì)應(yīng)的變量, -n 對(duì)應(yīng)的變量就是 --name 。所以我們使用print 打印的時(shí)候才顯示的name = hou
簡(jiǎn)單理解:一個(gè)“-”的是指令,兩個(gè)“--”的是接收指令內(nèi)容的變量。
三、ArgumentParser參數(shù)
ArgumentParse是解析器對(duì)象,在創(chuàng)建一個(gè)解析器對(duì)象的時(shí)候,是有很多參數(shù)可以配置,下面就演示一下這些參數(shù)的使用
1、prog: 程序的名稱(默認(rèn)值:sys.argv[0])
# 導(dǎo)入 argparse 模塊 import argparse # 創(chuàng)建一個(gè)argparse 的對(duì)象 parser = argparse.ArgumentParser() # 添加一個(gè)接收參數(shù),默認(rèn)值為Se7eN parser.add_argument("-n", "--name", default="Se7eN") # 獲取對(duì)應(yīng)的參數(shù)的值 args = parser.parse_args() # 控制臺(tái)打印出來(lái)接收到的值 print("args = {}".format(args))
執(zhí)行代碼:
修改代碼繼續(xù)演示
# 導(dǎo)入 argparse 模塊 import argparse # 創(chuàng)建一個(gè)argparse 的對(duì)象 parser = argparse.ArgumentParser(prog="testname") # 注意這里添加了prog=testname # 添加一個(gè)接收參數(shù),默認(rèn)值為Se7eN parser.add_argument("-n", "--name", default="Se7eN") # 獲取對(duì)應(yīng)的參數(shù)的值 args = parser.parse_args() # 控制臺(tái)打印出來(lái)接收到的值 print("args = {}".format(args))
2、usage: 用來(lái)描述該程序的用途,并且會(huì)覆蓋原來(lái)的prog的顯示
修改部分程序:
# 創(chuàng)建一個(gè)argparse 的對(duì)象 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模塊")
展示結(jié)果
3、description:幫助文檔的描述和uasge功能類似,只是顯示的位置不一樣
繼續(xù)修改部分代碼:
# 創(chuàng)建一個(gè)argparse 的對(duì)象 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模塊", description="這是程序的介紹,和usage的功能模塊描述類似")
展示結(jié)果
4、epilog:幫助文檔的額外說(shuō)明,位置在最下面
繼續(xù)修改部分代碼:
# 創(chuàng)建一個(gè)argparse 的對(duì)象 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模塊", description="這是程序的介紹,和usage的功能模塊描述類似", epilog="額外說(shuō)明")
展示結(jié)果:
5、自定義指令的前綴
默認(rèn)是"-" 和 "--",這里如果你不喜歡使用,也可以自通過(guò)該參數(shù)自己指定前綴,個(gè)人覺(jué)得沒(méi)必要。
代碼演示:
# 導(dǎo)入 argparse 模塊 import argparse # 創(chuàng)建一個(gè)argparse 的對(duì)象 ,并通過(guò)prefix_chars 指定指令的前綴為 '+' parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模塊", description="這是程序的介紹,和usage的功能模塊描述類似", epilog="額外說(shuō)明", prefix_chars='+') # 添加一個(gè)接收參數(shù),默認(rèn)值為Se7eN,這里的指令只能使用+ 表示,否則會(huì)報(bào)錯(cuò) parser.add_argument("+n", "++name", default="Se7eN") # 獲取對(duì)應(yīng)的參數(shù)的值 args = parser.parse_args() # 控制臺(tái)打印出來(lái)接收到的值 print("args = {}".format(args))
執(zhí)行結(jié)果
四、add_argument指令參數(shù)解釋
1、action: 的作用比較多,有保存布爾類型,常量類型,數(shù)組類型的參數(shù)的功能
注意1:使用action = store_true/store_false 時(shí)修飾的指令是不能賦值的,其對(duì)應(yīng)的指令的值是布爾類型的
注意2:使用action = store_const 時(shí)修飾的指令的是不能賦值,其對(duì)應(yīng)的指令的值常量類型
注意3:使用action = append 是可以復(fù)制,其對(duì)應(yīng)的值會(huì)將該指令對(duì)應(yīng)的值放在一個(gè)數(shù)組中
1.1 先來(lái)演示
使用action,保存布爾類型的指令的值:store_true/store_false:保存布爾類型的變量:
# 導(dǎo)入 argparse 模塊 import argparse # 創(chuàng)建一個(gè)argparse 的對(duì)象 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模塊", description="這是程序的介紹,和usage的功能模塊描述類似", epilog="額外說(shuō)明") # 添加一個(gè)接收參數(shù) -n,action = store_true 表示,<strong>在使用的時(shí)候,如果填寫(xiě)了該指令,那么該指令對(duì)應(yīng)的值就是true,如果沒(méi)有使用該指令,則為空</strong> parser.add_argument("-n", "--name", action='store_true') # 獲取對(duì)應(yīng)的參數(shù)的值 args = parser.parse_args() # 控制臺(tái)打印出來(lái)接收到的值 print("args = {}".format(args))
執(zhí)行結(jié)果:
1.2、使用action設(shè)置常量指令
修改代碼演示:
# 添加一個(gè)接收參數(shù) -n,action = store_const 表示,在使用的時(shí)候,如果填寫(xiě)了該指令,那么該指就等于10 如果沒(méi)寫(xiě)就等于空 parser.add_argument("-n", "--name", action='store_const',const=10)
執(zhí)行結(jié)果:
1.3、使用action設(shè)置數(shù)組類型的指令
修改代碼演示:
# 添加一個(gè)接收參數(shù) -n,action = append, 會(huì)把該指令的值放在數(shù)組中 parser.add_argument("-n", "--name", action='append')
執(zhí)行結(jié)果
2、nargs參數(shù):表示該指令接收值的個(gè)數(shù)
示例1:
import argparse # 創(chuàng)建一個(gè)argparse 的對(duì)象 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模塊", description="這是程序的介紹,和usage的功能模塊描述類似", epilog="額外說(shuō)明") # 添加一個(gè)接收參數(shù) -n, 并且該參數(shù)還必須要接收2個(gè)值,會(huì)放在一個(gè)數(shù)組中,其中nargs等于幾,就表示要接受幾個(gè)參數(shù) parser.add_argument("-n", "--name", nargs=2) # 獲取對(duì)應(yīng)的參數(shù)的值 args = parser.parse_args() # 控制臺(tái)打印出來(lái)接收到的值 print("args = {}".format(args))
運(yùn)行結(jié)果:
示例2:
# 導(dǎo)入 argparse 模塊 import argparse # 創(chuàng)建一個(gè)argparse 的對(duì)象 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模塊", description="這是程序的介紹,和usage的功能模塊描述類似", epilog="額外說(shuō)明") # 添加一個(gè)接收參數(shù) -n, # nargs = "?" : 表示只接收1個(gè)參數(shù),正則表達(dá)式的寫(xiě)法 # nargs = "+" : 表示接收1一個(gè)或多個(gè)參數(shù) # nargs = "*" : 表示接收0個(gè)或者多個(gè)參數(shù) parser.add_argument("-n", "--name", nargs="*") # 獲取對(duì)應(yīng)的參數(shù)的值 args = parser.parse_args() # 控制臺(tái)打印出來(lái)接收到的值 print("args = {}".format(args))
打印結(jié)果就不演示了
3、required 該指令是必須的
# 導(dǎo)入 argparse 模塊 import argparse # 創(chuàng)建一個(gè)argparse 的對(duì)象 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模塊", description="這是程序的介紹,和usage的功能模塊描述類似", epilog="額外說(shuō)明") # 添加一個(gè)接收參數(shù) -n, # nargs = "?" : 表示只接收1個(gè)參數(shù),正則表達(dá)式的寫(xiě)法 # nargs = "+" : 表示接收1一個(gè)或多個(gè)參數(shù) # nargs = "*" : 表示接收0個(gè)或者多個(gè)參數(shù) parser.add_argument("-n", "--name", nargs="*", required=True) # 獲取對(duì)應(yīng)的參數(shù)的值 args = parser.parse_args() # 控制臺(tái)打印出來(lái)接收到的值 print("args = {}".format(args))
演示結(jié)果:
4、choices:如有choices選項(xiàng),則該指令的值只能是choices中的一個(gè)
代碼演示
# 導(dǎo)入 argparse 模塊 import argparse # 創(chuàng)建一個(gè)argparse 的對(duì)象 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模塊", description="這是程序的介紹,和usage的功能模塊描述類似", epilog="額外說(shuō)明") # 添加一個(gè)接收參數(shù) -n, # nargs = "?" : 表示只接收1個(gè)參數(shù),正則表達(dá)式的寫(xiě)法 # nargs = "+" : 表示接收1一個(gè)或多個(gè)參數(shù) # nargs = "*" : 表示接收0個(gè)或者多個(gè)參數(shù) parser.add_argument("-n", "--name", nargs="*", required=True, choices=['zhangsan', 'lisi']) # 獲取對(duì)應(yīng)的參數(shù)的值 args = parser.parse_args() # 控制臺(tái)打印出來(lái)接收到的值 print("args = {}".format(args))
運(yùn)行結(jié)果:
五、vars()
vars()方法可以將parser對(duì)象變成字典,方便使用
代碼演示
# 導(dǎo)入 argparse 模塊 import argparse # 創(chuàng)建一個(gè)argparse 的對(duì)象 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模塊", description="這是程序的介紹,和usage的功能模塊描述類似", epilog="額外說(shuō)明") # 添加一個(gè)接收參數(shù) -n, # nargs = "?" : 表示只接收1個(gè)參數(shù),正則表達(dá)式的寫(xiě)法 # nargs = "+" : 表示接收1一個(gè)或多個(gè)參數(shù) # nargs = "*" : 表示接收0個(gè)或者多個(gè)參數(shù) parser.add_argument("-n", "--name", nargs="*", required=True, choices=['zhangsan', 'lisi']) # 獲取對(duì)應(yīng)的參數(shù)的值 args = parser.parse_args() # 控制臺(tái)打印出來(lái)接收到的值 print("args = {}".format(args)) # 將parser 變成字典對(duì)象 print('arg_vars = {}'.format(vars(args)))
輸出結(jié)果:
以上就是Python命令行參數(shù)解析包argparse的使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Python argparse的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
numpy.random.seed()的使用實(shí)例解析
這篇文章主要介紹了numpy.random.seed()的使用實(shí)例解析,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02python如何調(diào)用php文件中的函數(shù)詳解
這篇文章主要給大家介紹了關(guān)于python如何調(diào)用php文件中函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12python縮進(jìn)長(zhǎng)度是否統(tǒng)一
在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python縮進(jìn)長(zhǎng)度是否統(tǒng)一的相關(guān)知識(shí)點(diǎn),需要的朋友們可以學(xué)習(xí)下。2020-08-08pandas對(duì)齊運(yùn)算的實(shí)現(xiàn)示例
本文主要介紹了pandas對(duì)齊運(yùn)算的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10Python制作簡(jiǎn)單的網(wǎng)頁(yè)爬蟲(chóng)
自己寫(xiě)的一個(gè)爬蟲(chóng),模仿了python核心編程書(shū)里的程序,有詳細(xì)的注釋。 是我一個(gè)理解學(xué)習(xí)的過(guò)程吧。 有需要的小伙伴可以參考下2015-11-11python實(shí)現(xiàn)學(xué)生通訊錄管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)學(xué)生通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-02-02