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

geo*_*org 166 python argparse

鉴于:

import argparse

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

print pa.parse_args('--foo 1'.split())
Run Code Online (Sandbox Code Playgroud)

我如何能

  • 使"富,酒吧"强制至少一个:--foo x,--bar y并且--foo x --bar y是精
  • 最多制作一个"foo,bar"强制性:--foo x或者--bar y很好,--foo x --bar y不是

jle*_*and 262

我认为你正在寻找互相排斥的东西(至少在问题的第二部分).

这样,只接受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()
Run Code Online (Sandbox Code Playgroud)

顺便说一下,刚发现另一个问题涉及同一类问题.

希望这可以帮助

  • 嘿@ijoseph,这个答案现在已经过时了.我不确定答案是什么.它现在可能已被删除.对不起! (3认同)
  • @jlengrand 在我意识到它实际上解决了问题中提出的两个条件(基本上是“XOR”)之后,您的答案仍然对我有用。我最初的担忧是你的只解决了两个条件之一。 (2认同)

sth*_*sth 31

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

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")
Run Code Online (Sandbox Code Playgroud)