还有其他方法可以解析组中的args吗?

时间:2014-07-25 09:11:31

标签: python python-2.7 arguments argparse args

我刚试过那些:

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

1 个答案:

答案 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',...)