python程序運(yùn)行添加命令行參數(shù)argparse模塊具體用法詳解
一. argparse介紹
很多時(shí)候,我們的程序要帶參數(shù)來運(yùn)行不同的功能,需要解析命令行參數(shù)。argparse模塊能夠很好的提供支持。
argparse是 python 自帶的命令行參數(shù)解析包,用于解析命令行參數(shù)的標(biāo)準(zhǔn)模塊??梢宰屓溯p松編寫用戶友好的命令行接口,還會(huì)自動(dòng)生成幫助和使用手冊(cè),并在用戶給程序傳入無效參數(shù)時(shí)報(bào)出錯(cuò)誤信息。
二. 使用步驟及參數(shù)介紹
argparse模塊的使用可以簡(jiǎn)化成下面四個(gè)步驟:
1)import argparse 導(dǎo)入模塊
2)parser = argparse.ArgumentParser() 創(chuàng)建一個(gè)解析對(duì)象(命令行解析器)
ArgumentParser對(duì)象的相關(guān)屬性,全部參數(shù):
3)parser.add_argument() 向該對(duì)象中添加要關(guān)注的命令行參數(shù)和選項(xiàng),每一個(gè)add_argument方法對(duì)應(yīng)一個(gè)要關(guān)注的參數(shù)或選項(xiàng);
add_argument相關(guān)屬性,全部參數(shù):
屬性 | 解釋 |
---|---|
name or flags | 一個(gè)命名或者一個(gè)選項(xiàng)字符串的列表,例如 foo 或 -f, --foo。 |
action | 當(dāng)參數(shù)在命令行中出現(xiàn)時(shí)使用的動(dòng)作基本類型。 |
nargs | 命令行參數(shù)應(yīng)當(dāng)消耗的數(shù)目。 |
const | 被一些 action 和 nargs 選擇所需求的常數(shù)。 |
default | 當(dāng)參數(shù)未在命令行中出現(xiàn)并且也不存在于命名空間對(duì)象時(shí)所產(chǎn)生的值。 |
type | 命令行參數(shù)應(yīng)當(dāng)被轉(zhuǎn)換成的類型。 |
choices | 可用的參數(shù)的容器。 |
required | 此命令行選項(xiàng)是否可省略 (僅選項(xiàng)可用)。 |
help | 一個(gè)此選項(xiàng)作用的簡(jiǎn)單描述。 |
metavar | 在使用方法消息中使用的參數(shù)值示例。 |
dest | 被添加到 parse_args() 所返回對(duì)象上的屬性名。 |
4)parser.parse_args() 調(diào)用parse_args()方法進(jìn)行解析
parse_args相關(guān)屬性,全部參數(shù):
屬性 | 解釋 | 默認(rèn)值 |
---|---|---|
args | 要解析的字符串列表 | 從 sys.argv 獲取。 |
namespace | 用于獲取屬性的對(duì)象 | 一個(gè)新的空 Namespace 對(duì)象。 |
三. 具體使用
add_argument() 方法必須知道它是否是一個(gè)選項(xiàng),例如 -f 或 --foo,或是一個(gè)位置參數(shù)。
第一個(gè)傳遞給 add_argument() 的參數(shù)必須是一系列旗標(biāo)或者是一個(gè)簡(jiǎn)單的參數(shù)名。
當(dāng) parse_args() 被調(diào)用,選項(xiàng)會(huì)以 - 前綴識(shí)別,剩下的參數(shù)則會(huì)被假定為位置參數(shù)。
-(橫杠)和 –(雙橫杠)都是用來表示命令行參數(shù)的前綴符號(hào):
-用來表示短參數(shù)(Short options),通常只有一個(gè)字符。
–用來表示長(zhǎng)參數(shù)(Long options),通常是一個(gè)單詞或短語(yǔ)。
在argparse中,-和–可以用來定義命令行參數(shù)的簡(jiǎn)寫和全名,例如:parser.add_argument(‘-n’, ‘–name’, help=‘輸入姓名’)
import argparse if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('-n', '--name', help='輸入姓名') args = parser.parse_args() # 獲得傳入的參數(shù) print(args)
帶參執(zhí)行結(jié)果:
3.1 設(shè)置必需參數(shù)
add_argument方法的required參數(shù)可以設(shè)置該參數(shù)是否是必需。
如果該參數(shù)設(shè)置為必需參數(shù),程序執(zhí)行時(shí)未指定該參數(shù)會(huì)報(bào)錯(cuò)!
import argparse if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--name', help='輸入姓名', required=True) parser.parse_args() # 獲得傳入的參數(shù) print(args) # 獲得指定的參數(shù) print(args.name)
運(yùn)行 python test.py 和 python test.py --name Elaine
結(jié)果:
3.2 傳一個(gè)參數(shù)
add_argument添加一個(gè)參數(shù)選項(xiàng)
import argparse if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--name', help='輸入姓名') args = parser.parse_args() # 獲得傳入的參數(shù) print(args) # 獲得指定的參數(shù) print(args.name)
運(yùn)行程序 -h 看一下效果
D:\>python test.py -h usage: test.py [-h] [--name NAME] optional arguments: -h, --help show this help message and exit --name NAME 輸入姓名
帶一個(gè)參數(shù)和帶三個(gè)參數(shù)運(yùn)行的結(jié)果:
可以看到,這種情形下傳入三個(gè)參數(shù)會(huì)報(bào)錯(cuò)!
3.3 傳多個(gè)參數(shù)
1)add_argument加上nargs參數(shù),nargs是用來說明傳入的參數(shù)個(gè)數(shù),例如:
import argparse if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--name', nargs=3, help='輸入姓名') args = parser.parse_args() # 獲得傳入的參數(shù) print(args) # 獲得指定的參數(shù) print(args.name)
運(yùn)行 python test.py --name Elaine 和 python test.py --name Elaine Elaine1 Elaine2
結(jié)果:
2)nargs為’+’ 表示傳入至少一個(gè)參數(shù),可以不用指定具體多少個(gè)參數(shù),例如:
import argparse if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--name', nargs='+', help='輸入姓名') args = parser.parse_args() # 獲得傳入的參數(shù) print(args) # 獲得指定的參數(shù) print(args.name)
運(yùn)行 python test.py --name Elaine 和 python test.py --name Elaine Elaine1 Elaine2
結(jié)果:
3.4 位置參數(shù)和可選參數(shù)
add_argument() 方法必須知道它是否是一個(gè)選項(xiàng),例如 -f 或 --foo,或是一個(gè)位置參數(shù)。
第一個(gè)傳遞給 add_argument() 的參數(shù)必須是一系列旗標(biāo)或者是一個(gè)簡(jiǎn)單的參數(shù)名。
當(dāng) parse_args() 被調(diào)用,選項(xiàng)會(huì)以 - 前綴識(shí)別,剩下的參數(shù)則會(huì)被假定為位置參數(shù)。
1)位置參數(shù)
add_argument第一個(gè)參數(shù)可以這么創(chuàng)建:parser.add_argument(‘name’, help=‘輸入姓名’)
其中第一個(gè)參數(shù)可以是任何參數(shù)名,但前面不要加 - (橫杠)或 –(雙橫杠)
這些參數(shù)是不帶前綴的參數(shù),它們通常用于需要按特定順序提供的參數(shù),且通常是必需的。
import argparse if __name__ == '__main__': parser = argparse.ArgumentParser(description='命令行中傳入一個(gè)參數(shù)') parser.add_argument('name', help='輸入姓名') parser.add_argument('country', help='國(guó)家') args = parser.parse_args() # 獲得傳入的參數(shù) print(args)
執(zhí)行 python test.py Elaine China 和 python test.py China Elaine
結(jié)果:
所以位置參數(shù)都是順序的,在命令行中傳入?yún)?shù)時(shí)候,傳入的參數(shù)的先后順序不同,運(yùn)行結(jié)果往往會(huì)不同!
執(zhí)行 python test.py Elaine 時(shí)缺少第二個(gè)位置參數(shù)會(huì)報(bào)錯(cuò),所以位置參數(shù)通常是必須的。例如:
2)可選參數(shù)
為了在命令行中避免上述位置參數(shù)的順序混亂,可以使用可選參數(shù)。這個(gè)很像關(guān)鍵詞傳參,但是需要在關(guān)鍵詞前面加-
例如:
import argparse if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--name', nargs='+', help='輸入姓名') parser.add_argument('--country', nargs='+', help='國(guó)家名稱') args = parser.parse_args() # 獲得傳入的參數(shù) print(args)
執(zhí)行 python test.py --name Elaine Elaine1 Elaine2 和 python test.py --name Elaine Elaine1 Elaine2 --country China
結(jié)果:
可選參數(shù)雖然寫法比較繁瑣,但是增加了命令行中的可讀性,不容易因?yàn)閰?shù)傳入順序?qū)е聰?shù)據(jù)錯(cuò)亂。
3.5 參數(shù)設(shè)置默認(rèn)值
add_argument加上default參數(shù)
import argparse if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('-n', '--name', help='輸入姓名') parser.add_argument('-c', '--country', default='China', help='國(guó)家名稱') args = parser.parse_args() # 獲得傳入的參數(shù) print(args)
運(yùn)行python test.py --name Elaine 和 python test.py
結(jié)果:
3.6 其它用法
想要了解更多,可以去看看官方文檔
參考官方文檔:https://docs.python.org/zh-cn/3.9/library/argparse.html#parents
總結(jié)
到此這篇關(guān)于python程序運(yùn)行添加命令行參數(shù)argparse模塊具體用法的文章就介紹到這了,更多相關(guān)python命令行參數(shù)argparse模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
通過?for?循環(huán)比較?Python?與?Ruby?的編程區(qū)別
這篇文章主要介紹了通過?for?循環(huán)比較?Python?與?Ruby?的編程區(qū)別,Ruby?與?Python?之間的差異在很大程度上可通過for循環(huán)看出本質(zhì),下文詳細(xì)介紹需要的小伙伴可以參考一下2022-05-05使用Django框架中ORM系統(tǒng)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)增刪改查
這篇文章主要介紹了使用Django的ORM實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)增刪改查方法,文中附含詳細(xì)示例代碼以及過程詳解,有需要的朋友可以借鑒參考下2021-09-09Django創(chuàng)建一個(gè)后臺(tái)的基本步驟記錄
這篇文章主要給大家介紹了關(guān)于Django創(chuàng)建一個(gè)后臺(tái)的基本步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10詳解Python如何使用PyBuilder從零開始構(gòu)建項(xiàng)目
PyBuilder是一個(gè)用于構(gòu)建Python項(xiàng)目的工具,它提供了一種簡(jiǎn)單而強(qiáng)大的方式來管理項(xiàng)目的依賴、運(yùn)行測(cè)試、生成文檔等任務(wù),下面就跟隨小編一起來學(xué)習(xí)一下如何使用PyBuilder構(gòu)建項(xiàng)目吧2024-03-03Python?Pandas學(xué)習(xí)之series的二元運(yùn)算詳解
二元運(yùn)算是指由兩個(gè)元素形成第三個(gè)元素的一種規(guī)則,例如數(shù)的加法及乘法;更一般地,由兩個(gè)集合形成第三個(gè)集合的產(chǎn)生方法或構(gòu)成規(guī)則稱為二次運(yùn)算。本文將詳細(xì)講講Pandas中series的二元運(yùn)算,感興趣的可以了解一下2022-09-09python 創(chuàng)建一個(gè)空dataframe 然后添加行數(shù)據(jù)的實(shí)例
今天小編就為大家分享一篇python 創(chuàng)建一個(gè)空dataframe 然后添加行數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06python正則表達(dá)式完成車牌號(hào)檢驗(yàn)的代碼實(shí)例
這篇文章主要給大家介紹了關(guān)于python正則表達(dá)式完成車牌號(hào)檢驗(yàn)的相關(guān)資料,在Python中正則表達(dá)式是一種用于匹配和操作字符串的強(qiáng)大工具,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02