我需要的是:
pro [-a xxx | [-b yyy -c zzz]]
我试过但没用。有人能帮我吗?
group= parser.add_argument_group('Model 2')
group_ex = group.add_mutually_exclusive_group()
group_ex.add_argument("-a", type=str, action = "store", default = "", help="test")
group_ex_2 = group_ex.add_argument_group("option 2")
group_ex_2.add_argument("-b", type=str, action = "store", default = "", help="test")
group_ex_2.add_argument("-c", type=str, action = "store", default = "", help="test")
谢谢!
有一个python补丁(正在开发中)允许您这样做。
http://bugs.python.org/issue10984
这样做的目的是允许相互排斥的群体重叠。所以
usage
看起来像:更改argparse代码,以便可以创建两个组,这是最简单的部分。更改
usage
格式代码需要编写自定义HelpFormatter
。在
argparse
中,动作组不影响解析。它们只是一个格式化工具。在help
中,互斥组只影响usage
行。解析时,parser
使用互斥组构造潜在冲突的字典(a
不能与b
或c
一起出现,b
不能与a
等一起出现),然后在发生冲突时引发错误。如果没有argparse补丁,我认为最好的选择是自己测试由
parse_args
生成的名称空间(例如,如果a
和b
都有非默认值),并引发自己的错误。甚至可以使用解析器自己的错误机制。虽然Jonathan's answer对于复杂的选项来说非常好,但是对于简单的情况,有一个非常简单的解决方案,例如1个选项排除了2个其他选项,如
甚至如最初的问题:
我会这样做:
我在这里使用给命令行包装器的选项来查询mongodb。
collection
实例可以调用方法aggregate
,也可以调用具有可选参数query
和fields
的方法find
,因此您可以看到前两个参数兼容而最后一个参数不兼容的原因现在我运行
parser.parse_args()
并检查它的内容:当然,这个小技巧只适用于简单的情况,如果你有许多相互排斥的选项和组,那么检查所有可能的选项将成为一场噩梦。在这种情况下,你应该打破你的选择,以命令组,如乔纳森建议。
add_mutually_exclusive_group
不会使整个组相互排斥。它使组内的选项互斥。你要找的是subcommands。而不是prog[-a xxxx |[-b yyy-c zzz]],您将拥有:
要使用第一组参数调用:
要使用第二组参数调用:
也可以将子命令参数设置为位置参数。
有点像git或svn:
工作实例
测试一下
祝你好运。
相关问题 更多 >
编程相关推荐