我刚试过那些:
arg = argparse.ArgumentParser(description='Corpse v0.1a Stable Alpha Experiment')
arg.add_argument('--about', help = 'About author and license information.', action = 'store_true')
gr_root = arg.add_mutually_exclusive_group()
gr_render = gr_root.add_mutually_exclusive_group()
gr_render.add_argument('-r', '--render', help = 'A raw text to render it into a corpus database.')
gr_render.add_argument('--append', help = 'If there is already a database, this option will be useful.', action = 'store_true')
gr_load = gr_root.add_mutually_exclusive_group()
gr_load.add_argument('-l', '--load', help = 'A database name to report the content.')
gr_load.add_argument('-p', '--pattern', help = 'The token pattern that is needed to be reported.')
gr_load.add_argument('--less', help = 'List the pattern that is "less and equal" than the count.', action = 'store')
gr_load.add_argument('--more', help = 'List the pattern that is "more and equal" than the count.', action = 'store')
args = vars(arg.parse_args())
我在这个平台上使用了一个问题,但我不记得它是什么。当我使用add_mutually_exclusive_group()时,似乎它将组参数与" OR"分开。运营商。我理解这个输出我得到了:
usage: corpse.py [-h] [--about] [[-r RENDER | --append]
[-l LOAD | -p PATTERN | --less LESS | --more MORE]
corpse.py: error: argument --append: not allowed with argument -r/--render
但是,我想要将组中的参数分开使用它们,这意味着我想要这个:
[-r RENDER & --append]
不是这个:
[-r RENDER | --append]
我的意思是我一起使用 render 和追加参数,不使用加载,模式, less 和 more 。
答案 0 :(得分:1)
http://bugs.python.org/issue22047解释了嵌套组的难度。请注意使用中的[[
。
现在最好的选择是在解析后进行测试。请参阅https://stackoverflow.com/a/24915802/901925。
理想的使用线会是什么样的?
这是一个基于子分析器的解决方案的粗略草图:
parser = ArguementParser()
sp = parser.add_subparsers(dest='cmd')
sp.add_parser('about')
spp = sp.add_parser('load', help='report content of a database')
spp.add_argument('database')
spp.add_argument('--pattern', ...)
spp.add_argument('--less', ...)
spp.add_argument('--more', ...)
spp = sp.add_parser('render', help='render text into a database')
spp.add_argument('text')
spp.add_argument('--append',...)