如果定義:
In [422]: parser=argparse.ArgumentParser()
In [423]: g=parser.add_mutually_exclusive_group()
In [424]: g.add_argument('--foo')
In [426]: g.add_argument('bar',nargs='*',default='test')
In [427]: parser.print_help()
usage: ipython2.7 [-h] [--foo FOO | bar [bar ...]]
positional arguments:
bar
optional arguments:
-h, --help show this help message and exit
--foo FOO
In [429]: parser.parse_args([])
Out[429]: Namespace(bar='test', foo=None)
In [430]: parser.parse_args(['one','two'])
Out[430]: Namespace(bar=['one', 'two'], foo=None)
In [431]: parser.parse_args(['--foo','two'])
Out[431]: Namespace(bar='test', foo='two')
有了這個,你可以指定兩個未標記的值(真任意數字),或--foo
標記一個值。如果我同時嘗試,它會反對。我本可以將該組標記爲required
。
有兩點要注意:除非我指定一個default
和const
標記--foo
爲nargs='?'
比較毫無意義。
我只能在排他組中指定一個位置,並且該參數必須有'?'或'*'和'默認'。換句話說,它必須是真正可選的。
沒有mutual_exclusive_group,我可以使兩個位置?
,但我不能說'零或兩個參數'。
那麼,有沒有解決辦法? –
爲了讓它接受2個定位或一個標記的參數,但不是兩個?解決方案是讓解析器同時接受這兩個問題,然後編寫自己的代碼進行抱怨。 – hpaulj