在组之间使用互斥

我试图在不同的组之间建立一个互斥的组:我有-a,-b,-c参数,并且我想与-a和-b在一起,或与-a和-c在一起发生冲突。帮助应该显示类似[-a | ([-b] [-c])]。


以下代码似乎没有互斥选项:


import argparse

parser = argparse.ArgumentParser(description='My desc')

main_group = parser.add_mutually_exclusive_group()

mysub_group = main_group.add_argument_group()

main_group.add_argument("-a", dest='a', action='store_true', default=False, help='a help')

mysub_group.add_argument("-b", dest='b', action='store_true',default=False,help='b help')

mysub_group.add_argument("-c", dest='c', action='store_true',default=False,help='c help')

parser.parse_args()

解析不同的组合-全部通过:


> python myscript.py -h

usage: myscript.py [-h] [-a] [-b] [-c]


My desc


optional arguments:

  -h, --help  show this help message and exit

  -a          a help

> python myscript.py -a -c

> python myscript.py -a -b

> python myscript.py -b -c

我尝试将更mysub_group改为add_mutually_exclusive_group将所有内容互斥:


> python myscript.py -h

usage: myscript.py [-h] [-a | -b | -c]


My desc


optional arguments:

  -h, --help  show this help message and exit

  -a          a help

  -b          b help

  -c          c help

如何为[-a | ([-b] [-c])]?


aluckdog
浏览 149回答 2
2回答

12345678_0001

因此,这已经被问过很多次了。简单的答案是“使用argparse,您不能这样做”。但是,这是简单的答案。您可以使用子解析器,因此:import argparseparser = argparse.ArgumentParser(description='My desc')sub_parsers = parser.add_subparsers()parser_a = sub_parsers.add_parser("a", help='a help')parser_b = sub_parsers.add_parser("b", help='b help')parser_b.add_argument("-c", dest='c', action='store_true',default=False,help='c help')parser.parse_args()然后,您将获得:$ python parser -husage: parser [-h] {a,b} ...My descpositional arguments:  {a,b}    a         a help    b         b helpoptional arguments:  -h, --help  show this help message and exit和:$ python parser b -husage: parser b [-h] [-c]optional arguments:  -h, --help  show this help message and exit  -c          c help如果您喜欢问题中所述的论据,请看一下docopt,它看起来很可爱,应该按照您想要的去做。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python