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

2024-10-01 09:27:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我在脚本中使用python2.7argparse。我正在执行以下脚本:

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

现在我想要的是

  1. 如果给定选项-a,则只应询问-b-c-d选项。

  2. 除此之外,我还想将这个组-a -b -c -d作为-e的一个,即([-a -b -c -d] | -e )

请纠正我的错误。


Tags: py脚本选项错误scriptargparsevaluefordvaluefora
1条回答
网友
1楼 · 发布于 2024-10-01 09:27:27

您的最佳选择是测试parse_args之后是否存在各种组合,并使用parser.error发出与argparse兼容的错误消息。写你的线。并确保默认值清楚地表明某个选项是否已被解析。在

如果您可以将-a-e选项更改为命令名,如cmdabuild,则可以使用子parser。在本例中,您可以定义一个接受-b、-c和-d的command_a子parser,以及另一个不接受-b、-c和-d的command_e子parser。这是关闭的argparse进入“required together”参数组。在

mutually exclusive groups可以用[-a -b -c]这样的用法来定义某些东西,但这仅仅意味着-b不能与{}和{}一起出现。但这种机制一点都不新奇。它只是构造一个排除的字典,并在每次解析一个新选项时对其进行检查。如果存在冲突,它将发出错误消息并退出。它不是用来处理复杂的组合的,例如您的(-e | agroup)。在

自定义操作还可以检查namespace中是否存在非默认值,这与解析后的操作非常类似。但在解析过程中这样做并不简单。这也引起了人们对秩序的质疑。是否要以与-a -c -b相同的方式处理-b -c -a?是-a检查其他人的存在,还是-b检查{}是否已经被解析?谁检查-e的存在或不存在。在

还有许多关于argparse组的其他堆栈问题,包括独占的和包含的,但我认为这些是最基本的问题。在

相关问题 更多 >