使用两个相互排斥的标志设置 Python 的 ArgumentParser,其中一个标志具有可选的附加标志

Setting up Python's ArgumentParser with two mutually excluding flags where one flag has optional additional flags

我想使用 Python 的 ArgumentParser 定义以下内容:

--mutually_exclusive_flag_A stringParameter

--mutually_exclusive_flag_B stringParameter
    --optional_b_flag_one
    --optional_b_flag_two

一个人可以使用 mutually_exclusive_flag_A 或 mutually_exclusive_flag_B,但不能同时使用两者。

如果使用mutually_exclusive_flag_B,则可以使用optional_b_flag_one和optional_b_flag_two。

optional_b_flag_one 和 optional_b_flag_two 是布尔标志。

我看到 add_mutally_exclusive_group 可以处理选择 mutually_exclusive_flag_A 或 mutually_exclusive_flag_B。但是,我不确定如何声明如果我使用 mutually_exclusive_flag_B,则 optional_b_flag_one 和 optional_b_flag_two 是有效标志。

看来我可以使用子解析器功能并将 mutually_exclusive_flag_A 和 mutually_exclusive_flag_B 转换为命令。

我最好的选择是什么?

argparse 无法处理如此复杂的测试。互斥组不能嵌套,它们不处理其他类型的逻辑(仅 xor,不包括 andor)。我在 Python bug/issue 中探索了这样的扩展,但这不是一个微不足道的添加。

最好的选择是解析后自己做测试。

argparse 的主要目的是弄清楚您的用户想要什么。检查有效性并发出漂亮的错误消息是一个加号,但不是解析任务的核心。

扩展此机制的问题之一是为一般组合编写有意义的用法消息。您是否考虑过如何向您的用户解释此要求?