我有一個腳本,我向用戶詢問要執行的預定義操作的列表。我還希望能夠在用戶沒有定義任何內容時採取特定的操作列表。然而,似乎試圖將這兩者結合在一起是不可能的。python argparse - 帶選項的可選append參數
當用戶沒有給出參數,他們收到一個錯誤,默認的選擇是無效
acts = ['clear','copy','dump','lock']
p = argparse.ArgumentParser()
p.add_argument('action', nargs='*', action='append', choices=acts, default=[['dump', 'clear']])
args = p.parse_args([])
>>> usage: [-h] [{clear,copy,dump,lock} [{clear,copy,dump,lock} ...]]
: error: argument action: invalid choice: [['dump', 'clear']] (choose from 'clear', 'copy', 'dump', 'lock')
當他們這樣做定義一組動作,得到的命名空間擁有了用戶的操作追加到默認,而不是替換默認
acts = ['clear','copy','dump','lock']
p = argparse.ArgumentParser()
p.add_argument('action', nargs='*', action='append', choices=acts, default=[['dump', 'clear']])
args = p.parse_args(['lock'])
args
>>> Namespace(action=[['dump', 'clear'], ['dump']])
我不確定這是否已被類似的bug解決了報告:http://bugs.python.org/issue9625。處理這種情況的一種可能方法是使用自定義操作,而不是使用`choices`關鍵字。看看[這個問題]上接受的答案(http://stackoverflow.com/questions/4194948/python-argparse-is-there-a-way-to-specify-a-range-in-nargs) – Chris 2011-12-15 22:04:32