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

时间:2016-09-07 13:02:54

标签: python python-3.x argparse

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

--mutually_exclusive_flag_A stringParameter

--mutually_exclusive_flag_B stringParameter
    --optional_b_flag_one
    --optional_b_flag_two

可以使用mutual_exclusive_flag_A或mutual_exclusive_flag_B,但不能同时使用两者。

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

optional_b_flag_one和optional_b_flag_two是布尔标志。

我确实看到add_mutally_exclusive_group来处理选择mutual_exclusive_flag_A或mutual_exclusive_flag_B。但是,我不知道怎么做是声明如果我使用mutual_exclusive_flag_B,那么optional_b_flag_one和optional_b_flag_two是有效的标志。

似乎我可以使用subparsers功能并将mutual_exclusive_flag_A和mutual_exclusive_flag_B转换为命令。

我最好的选择是什么?

1 个答案:

答案 0 :(得分:0)

argparse无法处理测试的复杂性。互斥组不能嵌套,也不能处理其他类型的逻辑(仅xor,而不是andor)。我已经在Python错误/问题中探索过这样的扩展,但这不是一个微不足道的补充。

最佳选择是在解析后进行自己的测试。

argparse的主要目的是找出用户想要的内容。检查有效性并发出一个好的错误消息是一个优点,但不是解析任务的核心。

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