我必须分析参数,其中4个必须相互关联,最后2个必须排他
组1sub_exclusive_1
有4个参数,如果其中任何一个参数已定义,则必须定义所有参数。在
组2sub_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
选项运行程序时的帮助部分。
有什么解决办法吗?在
我从您的代码中得到的
print_help
是所有参数都出现在
usage
中,但只有exclusive_group
出现在帮助中。而且这个组的括号在用法上是混乱的。在argparse
不提供一种机制来执行您想要的操作。有一些建议的补丁可能会让你达到目的,但现在什么也没有。在“参数组”只是帮助行显示机制。它不影响使用格式,也不影响解析。此外,参数组不能嵌套-接受参数,但不会出现在帮助中。在
互斥组可以嵌套在参数组中(用于帮助行显示)。但其效果只是在那个群体中展示了它的论点。在
如果您希望'first'、'second'等一起出现,请将它们作为
^{pr2}$nargs=4
参数的值,或者在解析后测试它们。比如:我可以给你指出处理“嵌套的包含性组”的bug问题,但这现在没有帮助。在
组1不应该是四个独立的参数,而是一个带有4个参数的单个选项:
那么};您需要相应地调整代码。一种选择是在解析后调整存储在命名空间中的值:
^{pr2}$command arg1 2 arg2 3 arg3 5 arg4 7
将变成{另一种方法是为
arg
定义一个自定义操作,它立即将4个值分配给命名空间中的正确目标。在然后可以定义一个包含}的排他组。在
arg
、first
、和{相关问题 更多 >
编程相关推荐