2016-11-30 48 views
0

如何添加一個可選參數,該參數具有默認值並且可以用另一個值調用或可以不帶值調用(並且具有默認值)。 所以我有這樣的說法Python argparse可選參數無參數(不存儲爲true)

parser.add_argument("-a", "--automatic", type=int, default=8) 

,我希望能夠調用。 My_script.py -a如果我想要一個以8作爲參數的自動模式,但是我也想要例如My_script.py -a 10,如果我想要一個自動模式以10(或任何其他數字)作爲參數。 問題是,當我用My_script.py -a運行時,我得到預期的一個參數。如果我不想指定8,我也不允許指定-a,然後我必須運行My_script.py,這不是我想要的。

+0

如果通過沒有任何事情等同於傳遞沒有值的'-a',爲什麼允許後者?它只是使分析中的錯誤/歧義變得更容易。 'nargs ='?''類型的作品(當它發生時,你必須用'8'手動替換'None',因爲如果沒有參數提供,它不是默認情況,所以它存儲'None'),但它是一個壞主意。 – ShadowRanger

+0

這似乎不明確。解析器應該如何判斷'-a'之後的東西是否是'-a'選項的值或位置參數?無論argparse是否支持這一點,我認爲這不是一個好的界面。 – user2357112

+0

用'nargs ='?''玩,並給它'默認'和'const'參數。 – hpaulj

回答

0

nargs='?'const=8。來自the documentation

ArgumentParser對象通常會將單個命令行參數與要執行的單個操作相關聯。 nargs關鍵字參數將不同數目的命令行參數與單個操作相關聯。

...

'?'。如有可能,將從命令行中消耗一個參數,並將其作爲單個項目生成。如果沒有命令行參數,將生成default的值。請注意,對於可選參數,還有一個額外的情況 - 選項字符串存在,但後面沒有命令行參數。在這種情況下,將產生來自const的值。

+1

這還不夠,你需要像'@hpaulj注意到的那樣傳遞'const',或者傳遞沒有值的switch來存儲'None',而不是'default'的值。 – ShadowRanger

+0

你是對的,@ ShadowRanger。我已經更新了我的答案。感謝你和hpaulj的糾正。 – Chris