241

鉴于:

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不是
4

2 回答 2

379

我认为您正在寻找诸如互斥之类的东西(至少对于您问题的第二部分)。

这样,只会接受 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()

顺便说一句,刚刚发现另一个问题指的是同类问题。

于 2012-06-22T11:14:52.873 回答
48

如果您需要一些模块未提供的检查,您可以随时手动进行:

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")
于 2012-06-22T11:22:16.140 回答