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

鉴于:

import argparse pa = argparse.ArgumentParser() pa.add_argument('--foo') pa.add_argument('--bar') print pa.parse_args('--foo 1'.split()) 

我如何

  • 至less使“foo,bar”中的一个为必填项: – foo --foo x ,– --bar y--foo x --bar y是好的
  • 至多使“foo,bar”之一是强制性的:–foo --foo x--bar y很好, --bar y foo --foo x --bar y不是

我认为你正在寻找互相排斥的东西(至less在你的问题的第二部分)。 这样,只有foo或bar才会被接受,而不是两个。

  group = parser.add_mutually_exclusive_group(required=True) group.add_argument('--foo',action=.....) group.add_argument('--bar',action=.....) args = parser.parse_args() 

你可以用Christian Witts的答案来解决问题的第一部分。 通过结合两者,你应该能够实现你想要的。

顺便说一句,刚刚发现另一个问题提到同类问题。

希望这可以帮助

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

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