2012-06-22 44 views
98

考慮:或者需要兩個參數使用argparse

import argparse 

pa = argparse.ArgumentParser() 
pa.add_argument('--foo') 
pa.add_argument('--bar') 

print pa.parse_args('--foo 1'.split()) 

我怎麼

  • 至少讓的 「富,酒吧」 強制之一:--foo x--bar y--foo x --bar y都很好
  • 使「富,酒吧」強制性的最多一個:--foo x--bar y都很好,--foo x --bar y不是
+0

的可能重複[如何編寫Python中argparse組合選項]( http://stackoverflow.com/questions/5603364/how-to-code-argparse-combinational-options-in-python) – robert

回答

152

我認爲你正在尋找類似mutual exclusion的東西(至少對於你的問題的第二部分)。 這樣,只有foo或bar纔會被接受,而不是兩個。

group = parser.add_mutually_exclusive_group(required=True) 
    group.add_argument('--foo',action=.....) 
    group.add_argument('--bar',action=.....) 
    args = parser.parse_args() 

你確實可以用Christian Witts的答案解決問題的第一部分。 通過結合兩者,你應該能夠實現你想要的。

順便說一句,剛剛發現another question指的是同一類問題。

希望這有助於

+0

我永遠不會猜到它是如此簡單!愛你Python 3.6! – bjd2385

20

如果你需要一些檢查不是由模塊提供你總是可以做手工:

pa = argparse.ArgumentParser() 
... 
args = pa.parse_args() 

if args.foo is None and args.bar is None: 
    pa.error("at least one of --foo and --bar required") 
相關問題