我想在argparse中实现这样的逻辑:
If argument A is selected, the user cannot select arguments B or C.
B and C can both be selected
Run Code Online (Sandbox Code Playgroud)
它看起来就像add_mutually_exclusive_group我想要的那样,但看起来你只能从一个互斥的组中选择一个选项,所以我不能将所有三个选项放在一个互斥的组中.
有没有办法在argparse中执行此操作?
你不能真正做到这一点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)
Run Code Online (Sandbox Code Playgroud)
我在这里使用命令行包装器的选项来查询 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)
Run Code Online (Sandbox Code Playgroud)
当然,这个小技巧只适用于简单的情况,如果您有许多互斥的选项和组,检查所有可能的选项将成为一场噩梦。在这种情况下,您应该将选项分解为命令组。为此,您应该遵循Python argparse 互斥组此处的建议。
jar*_*ary -1
您可以否定 A 的含义,然后使用子解析器。子解析器允许您指定“当且仅当选择 A 时,用户才能选择 B 或 C”。
http://docs.python.org/2/library/argparse.html
| 归档时间: |
|
| 查看次数: |
3236 次 |
| 最近记录: |