首頁 > 軟體

Python argparse模組實現解析命令列引數方法詳解

2022-09-24 14:00:36

argparse是Python的一個標準模組,用於解析命令列引數,即解析sys.argv中定義的引數。實現在:傳送門

argparse模組還會自動生成幫助和使用資訊,即在最後加-h或--help。當用戶輸入的引數無效時,會觸發error,並給出出錯原因。

python test_argparse.py -h
python test_argparse.py --help

使用argparse的步驟:

1.建立解析器:argparse.ArgumentParser(),ArgumentParser是個class,構造它時有很多引數可以指定,若不指定這些引數都使用預設值,如description=None:此python程式功能的描述;add_help=True:新增-h/--help選項

parser = argparse.ArgumentParser(description="test argparse's use", add_help=True)

2.新增引數:parser.add_argument(*args, **kwargs):*args允許函數接受任意數量的位置引數(positional arguments),**kwargs允許函數接受任意數量的關鍵字引數。Python不允許位置引數跟在關鍵字引數之後。

(1).name or flags:一個名字,位置引數(positional arguments),不帶有"-"或"--",如foo;一個可選字串的列表,如-f, --foo。當parse_args()被呼叫時,可選引數會以"-"字首識別,剩下的引數則會被假定為位置引數。

parser.add_argument("integers", metavar="N", type=int, nargs="+", help="an integer for the accumulator") # positional argument
parser.add_argument("--sum", dest="accumulate", action="store_const", const=sum, default=max, help="sum the integers(default: find the max)") # optional argument
args = parser.parse_args()
print(args.accumulate(args.integers)) # print either the sum or the max of the command-line integers

(2).action:ArgumentParser物件將命令列引數與action相關聯。這些action可以做與它們相關聯的命令列引數的任何事,儘管大多數action只是簡單的向parse_args()返回的物件上新增一個屬性。action關鍵字引數指定應如何處理命令列引數。預設的action是"store",儲存引數的值。

(3).nargs:此關鍵字引數將不同數量的命令列引數與單個操作相關聯。

"?":如果不存在命令列引數,則會使用default值;還有一種情況,"-"選項字串存在,但後面沒有跟著命令列引數,則會使用const值。

"*":所有命令列引數都收集到一個列表中。

"+":與"*"類似,但至少存在一個命令列引數,否則會產生錯誤訊息。

parser.add_argument('--foo', nargs='?', const='c', default='d')
args = parser.parse_args()
print(args.foo) # print 'c' or 'd' or command-line input

(4).const:此關鍵字引數用於儲存不是從命令列中讀取但被各種ArgumentParser操作所需的常數值。對'store_const'和'append_const' action,const關鍵字引數必須給出;對其它action,預設為None。

(5).default:此關鍵字引數用於在命令列引數不存在應使用的值,預設值為None。

(6).type:此關鍵字引數允許執行任何必要的型別檢查和型別轉換。

(7).choices:某些命令列引數應當從一組受限值中選擇,這些可以通過將容器物件作為choices關鍵字引數傳遞給add_argument()來處理。當執行命令列解析時,引數值將被檢查,如果引數不是可接受的值之一將觸發錯誤訊息。

parser.add_argument('addr', type=str, choices=['csdn', 'github'])
args = parser.parse_args()
print("addr:", args.addr)

(8).required:通常,argparse模組假定"-f"和"--bar"等標誌表示可選引數,在命令列中始終可以省略這些引數。要讓一個選項成為必需的,則可以將required關鍵字引數指定為True。

(9).help:包含引數簡短描述的字串。通常在命令列中使用-h或--help時,這些help描述將與每個引數一起顯示。

(10).metavar:當ArgumentParser生成幫助訊息時,它需要某種方式來參照每個預期的引數。預設情況下,ArgumentParser物件使用dest值作為每個物件的"name"。預設情況下,對於位置引數action,直接使用dest值,對於可選引數action,dest值是大寫的。可以使用metavar來指定一個替代名稱。

parser.add_argument('--foo')
parser.add_argument('--bar', metavar='XXX')
args = parser.parse_args()

(11).dest:大多數ArgumentParser操作都會新增一些值作為parse_args()返回的物件的一個屬性。此屬性的名稱由add_argument()的dest關鍵字引數確定。

3.解析引數:parser.parse_args(),將引數字串轉換為物件並將其設為名稱空間的屬性,返回帶有成員的名稱空間。

更多介紹參考:傳送門

GitHub

到此這篇關於Python argparse模組實現解析命令列引數方法詳解的文章就介紹到這了,更多相關Python argparse模組 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com