考虑到:

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不是


当前回答

我认为你在寻找类似互斥的东西(至少在你问题的第二部分)。

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

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

其他回答

如果你需要一些模块没有提供的检查,你可以手动执行:

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

我认为你在寻找类似互斥的东西(至少在你问题的第二部分)。

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

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