需要使用argparse的两个参数之一

问题:需要使用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不是

Given:

import argparse

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

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

how do I

  • make at least one of “foo, bar” mandatory: --foo x, --bar y and --foo x --bar y are fine
  • make at most one of “foo, bar” mandatory: --foo x or --bar y are fine, --foo x --bar y is not

回答 0

我认为您正在寻找类似互斥的内容(至少对于问题的第二部分而言)。

这样,仅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()

顺便说一句,只是发现了另一个问题,指的是同样的问题。

希望这可以帮助

I think you are searching for something like mutual exclusion (at least for the second part of your question).

This way, only foo or bar will be accepted, not both.

    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, just found another question referring to the same kind of issue.

Hope this helps


回答 1

如果您需要模块未提供的某些检查,则可以始终手动进行:

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

If you need some check that is not provided by the module you can always do it manually:

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