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

时间:2012-06-22 11:02:05

标签: python 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不是

2 个答案:

答案 0 :(得分:229)

我认为您正在搜索mutual exclusion之类的内容(至少在问题的第二部分)。

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

BTW,刚发现another question指的是同一类问题。

希望这有帮助

答案 1 :(得分:27)

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

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")