使用两个相互排斥的标志设置 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
,不包括 and
和 or
)。我在 Python bug/issue 中探索了这样的扩展,但这不是一个微不足道的添加。
最好的选择是解析后自己做测试。
argparse
的主要目的是弄清楚您的用户想要什么。检查有效性并发出漂亮的错误消息是一个加号,但不是解析任务的核心。
扩展此机制的问题之一是为一般组合编写有意义的用法消息。您是否考虑过如何向您的用户解释此要求?
我想使用 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
,不包括 and
和 or
)。我在 Python bug/issue 中探索了这样的扩展,但这不是一个微不足道的添加。
最好的选择是解析后自己做测试。
argparse
的主要目的是弄清楚您的用户想要什么。检查有效性并发出漂亮的错误消息是一个加号,但不是解析任务的核心。
扩展此机制的问题之一是为一般组合编写有意义的用法消息。您是否考虑过如何向您的用户解释此要求?