繁体   English   中英

argparse:如何使仅作为组需要的选项组

[英]argparse: how to make group of options required only as group

我的脚本使用的是python2.7argparse 我正在执行脚本,如下所示:

python2.7 script.py -a valuefora -b valueforb -c valueforc -d valueford

现在我想要的是

  1. 如果给出了选项-a ,则仅应询问-b-c-d选项。

  2. 除上述内容外,我还想将此组-a -b -c -d用作-eEITHER OR ,即([-a -b -c -d] | -e )

请在任何我错的地方纠正我。

最好的选择是测试parse_args之后是否存在各种组合,并使用parser.error发出argparse兼容的错误消息。 并编写您自己的usage行。 并确保默认值清楚地表明选项是否已解析。

如果可以将-a-e选项更改为命令名称(如cmdabuild ,则可以使用子解析器。 在这种情况下,你可以定义一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM