要求使用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")