我正在尝试执行以下操作:
$ prog.py -h
usage: prog.py [-h] [-s | -m] [[-y [year]] | [[-1 | -3] [month] [year]]]
但是,无论我如何使用add_argument_group和add_mutual_exclusive_group
#!/usr/bin/env python
import argparse
def main(opt):
print(opt)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
bar = parser.add_mutually_exclusive_group()
bar.add_argument('-s', action='store_true', default=True)
bar.add_argument('-m', action='store_true', default=False)
#bar = parser.add_argument_group()
bar = parser.add_mutually_exclusive_group()
bar.add_argument('-y', metavar='year', type=int,
dest='iy', nargs='?', default=0)
baz = bar.add_argument_group()
g_13 = baz.add_mutually_exclusive_group()
g_13.add_argument('-1', dest='i1',
help='Display single month output.',
action='store_true', default=True)
g_13.add_argument('-3', dest='i3',
help='Display prev/current/next month output.',
action='store_true', default=False)
#aaa = bar.add_argument_group()
baz.add_argument(metavar='month', type=int,
choices=range(1, 13),
dest='mo', nargs='?', default=1)
baz.add_argument(metavar='year', type=int,
dest='yr', nargs='?', default=2000)
main(parser.parse_args())
我只能做到:
$ prog.py -h
usage: prog.py [-h] [-s | -m] [-y [year]] [-1 | -3] [month] [year]
也就是说,我不能将[-y [year]]
和[[-1 | -3] [month] [year]]
分组为互斥组。我不明白为什么。有人能帮忙吗?谢谢。
参数组只是帮助组织帮助显示。它们不能嵌套。互斥组测试参数并修改用法显示。它们可以嵌套,但最终结果与组成一个大组的结果相同。http://bugs.python.org/issue11588正在尝试创建一个更通用的
usage
组。同时,如果互斥组没有给您足够的控制权,您可以编写一个自定义用法行,并在解析后测试参数。
这是一个使用我为http://bugs.python.org/issue11588开发的代码的解析器
这将
mutually_exclusive_group
替换为usage_group
,后者可以嵌套,并且可以测试除“异或”之外的其他逻辑关系任何类型都接受其参数的任何组合,就像您期望的“argument_group”起作用一样。结果的用法是:
主要的错误是位置的显示,“月”和“年”。它们在“any”组中位于正确的位置,但它们也显示在位置的通常尾随位置中。
它接受如下输入:
正如您所看到的,扩展组的概念并不是一件小事。我想我走对了,但还是有一些不好的地方。
相关问题 更多 >
编程相关推荐