[英]argparse: how to make group of options required only as group
我的脚本使用的是python2.7
和argparse
。 我正在执行脚本,如下所示:
python2.7 script.py -a valuefora -b valueforb -c valueforc -d valueford
现在我想要的是
如果给出了选项-a
,则仅应询问-b
, -c
和-d
选项。
除上述内容外,我还想将此组-a -b -c -d
用作-e
的EITHER OR ,即([-a -b -c -d] | -e )
请在任何我错的地方纠正我。
最好的选择是测试parse_args
之后是否存在各种组合,并使用parser.error
发出argparse
兼容的错误消息。 并编写您自己的usage
行。 并确保默认值清楚地表明选项是否已解析。
如果可以将-a
和-e
选项更改为命令名称(如cmda
或build
,则可以使用子解析器。 在这种情况下,你可以定义一个command_a
接受-B,-C和-d,而另一个子分析器command_e
有没有这些子分析器。 这就关闭了argparse
涉及“必需在一起”的参数组。
mutually exclusive groups
可以使用[-a -b -c]
这样的用法定义某些内容,但这仅意味着-b
不能与-a
和-c
一起出现。 但是这种机制没有什么幻想。 它只是构造了此类排除项的字典,并在每次解析新选项时对其进行检查。 如果存在冲突,它将发出错误消息并退出。 它未设置为处理精美的组合,例如您的(-e | agroup)
。
自定义操作还可以检查namespace
是否存在非默认值,就像解析后一样。 但是在解析过程中这样做并不简单。 并提出有关订单的问题。 您是否要以与-a -c -b
相同的方式处理-b -c -a
? -a
应该检查其他对象的存在,还是-b
应该检查-a
已经被解析? 谁检查-e
是否存在。
关于argparse组,还有其他一些堆栈问题,包括独占和包容性,但我认为这些是必不可少的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.