我想在argparse中实现这样的逻辑:
If argument A is selected, the user cannot select arguments B or C.
B and C can both be selected
看起来add_mutually_exclusive_group
是我想要的,但看起来你只能从一个互斥的组中选择一个选项,所以我不能把所有三个选项放在一个互斥的组中。
有没有办法在argparse中执行此操作?
答案 0 :(得分:2)
您无法真正使用argparse
,但是您可以在argparse
运行后执行此操作。
以下是一个例子:
parser = argparse.ArgumentParser()
# group 1
parser.add_argument("-q", "--query", help="query", required=False)
parser.add_argument("-f", "--fields", help="field names", required=False)
# group 2
parser.add_argument("-a", "--aggregation", help="aggregation",
required=False)
我在这里使用命令行包装器的选项来查询mongodb。 collection
实例可以使用可选参数aggregate
和find
调用方法query
或方法fields
,因此您可以看到为什么前两个参数是兼容,最后一个不是。
现在我运行parser.parse_args()
并检查它的内容:
args = parser().parse_args()
print args.aggregation
if args.aggregation and (args.query or args.fields):
print "-a and -q|-f are mutually exclusive ..."
sys.exit(2)
当然,这个小小的黑客只适用于简单的案例,如果您有许多互斥的选项和组,检查所有可能的选项将成为一场噩梦。在这种情况下,您应该将选项分解为命令组。为此,您应该遵循此处的建议Python argparse mutual exclusive group。
答案 1 :(得分:1)
答案 2 :(得分:-1)
你可以否定A的含义然后使用subparser。 subparsers允许您指定“当且仅当选择A时,用户可以选择B或C.”