2016-04-30 24 views
3

有沒有辦法指定Python的ArgumentParser兩個可選的標誌衝突?如何禁止兩個衝突的選項

arg_parser.add_argument('-c', '--clean', action='store_true') 
arg_parser.add_argument('-d', '--dirty', action='store_true') 

我希望用戶能夠指定任意這些都不或僅一個。

沒有更多條件可以實現嗎?

回答

9

如何添加mutually exclusive group

group = arg_parser.add_mutually_exclusive_group() 
group.add_argument('-c', '--clean', action='store_true') 
group.add_argument('-d', '--dirty', action='store_true') 

這個我得到以下行爲:

>>> arg_parser.parse_args(['--clean']) 
Namespace(clean=True, dirty=False) 
>>> arg_parser.parse_args(['--dirty']) 
Namespace(clean=False, dirty=True) 
>>> arg_parser.parse_args(['--dirty','--clean']) 
usage: PROG [-h] [-c | -d] PROG: error: argument -c/--clean: not allowed with argument -d/--dirty 
+0

我試過相同,但其被定義爲得到一個值參數,但它沒't work: group.add_argument(「 - v」,「--verbose」,type = str,nargs ='?') group.add_argument(「 - q」,「--quiet」,type = str, nargs ='?') 任何想法爲什麼? – omer