我必须解析其中4个必须相互捆绑的论点,最后2个必须是独占的
组1 sub_exclusive_1
有4个参数,如果定义了任何参数,则必须定义所有参数。
第2组sub_exclusive_2
有2个参数,其中只有1个可以定义,但前提是没有定义第1组。
parser = argparse.ArgumentParser(description='Main Description', epilog='Main Epilog')
group_exclusive = parser.add_argument_group('Exclusive')
root_exclusive = group_exclusive.add_mutually_exclusive_group()
sub_exclusive_1 = root_exclusive.add_argument_group()
sub_exclusive_1.add_argument("--firstList", action='store', help = "Help for firstList")
sub_exclusive_1.add_argument("--secondList", action='store', help = "Help for secondList")
sub_exclusive_1.add_argument("--thirdList", action='store', help = "Help for thirdList")
sub_exclusive_1.add_argument("--fourthList", action='store', help = "Help for fourthList")
sub_exclusive_2 = root_exclusive.add_mutually_exclusive_group()
sub_exclusive_2.add_argument("--last", action='store_true', help = "Help for Last")
sub_exclusive_2.add_argument("--first", action='store_true', help = "Help for First")
问题是:
无法将第1组参数相互关联。
将sub_exclusive_1
设为add_argument_group
而非。{
add_mutually_exclusive_group
,firstList ... fourthList
未显示在。{
使用-h
选项运行程序时的帮助部分。
任何解决方案?
答案 0 :(得分:0)
第1组不应该是四个单独的参数,而是一个带有4个参数的选项:
add_argument("--arg", nargs=4)
然后command --arg1 2 --arg2 3 --arg3 5 --arg4 7
将成为command --arg 2 3 5 7
;你需要相应地调整你的代码。一种选择是在解析后调整存储在命名空间中的值:
args = p.parse_args()
# Unpack the 4-tuple into the destinations used by your original parser
args.arg1, args.arg2, args.arg3, args.arg4 = args.arg
另一种方法是为--arg
定义一个自定义操作,该操作会立即将4个值分配给命名空间中的正确目标。
然后,您可以定义包含--arg
,--first
和--last
的专属论坛。
答案 1 :(得分:0)
我从您的代码中获得的print_help
(您应该已经显示)
In [420]: parser.print_help()
usage: ipython3 [-h] [--firstList FIRSTLIST] [--secondList SECONDLIST]
[--thirdList THIRDLIST] [--fourthList FOURTHLIST]
[[--last | --first]
optional arguments:
-h, --help show this help message and exit
Exclusive:
--last Help for Last
--first Help for First
所有参数都显示在usage
中,但只有exclusive_group
出现在帮助中。并且该组中的括号在使用中搞砸了。
argparse
没有提供执行您想要的操作的机制。有一些建议的补丁可能会让你在那里,但现在没有。
A'论证组'只是一个帮助线显示机制。它不会影响使用格式,也不会影响解析。此外,参数组不能嵌套 - 参数被接受,但不会出现在帮助中。
互斥组可以嵌套在参数组中(用于帮助行显示)。但效果只是在该组中展示其论点。
如果您希望第一个','秒'等一起发生,请将它们设为nargs=4
参数的值,或者在解析后对其进行测试。类似的东西:
group = [args.first, args.second, args.third, args.fourth]
if any([x is None for x in group]):
parser.error('all of the inclusive group is required')
我可以向您指出处理嵌套包容性群组的错误问题,但现在没有帮助。