问题:需要使用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")

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。