使用argparse需要两个参数中的任意一个

考虑到:

import argparse


pa = argparse.ArgumentParser()
pa.add_argument('--foo')
pa.add_argument('--bar')


print pa.parse_args('--foo 1'.split())

我该怎么做

  • 使"foo, bar"中至少有一个是强制性的:--foo x--bar y--foo x --bar y是可以的
  • 使"foo, bar"中最多有一个是强制的:--foo x--bar y是可以的,--foo x --bar y不是
81315 次浏览

我认为你正在寻找类似互斥的东西(至少在你的问题的第二部分)。

这样,只有foo或bar将被接受,而不是两者都接受。

import argparse


parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('--foo',action=.....)
group.add_argument('--bar',action=.....)
args = parser.parse_args()

顺便说一句,刚刚发现另一个问题提到了同样的问题。

如果你需要一些模块没有提供的检查,你可以手动执行:

pa = argparse.ArgumentParser()
...
args = pa.parse_args()


if args.foo is None and args.bar is None:
pa.error("at least one of --foo and --bar required")