在 python 脚本中,我想要三个位置参数和两个可选参数(包括“帮助”)。所以我的需要就像以下
正确的:
./myscript.py ONE TWO THREE
./myscript.py --list
不正确:
./myscript.py ONE TWO THREE --list
我想使用 argparse 本身使所有位置参数和可选参数互斥。
这近似于您想要的:
class Three(argparse.Action):
# custom action that requires 0 or 3 values
def __call__(self,parser,namespace,values,option_string):
if len(values) in [0,3]:
setattr(namespace, self.dest, values)
else:
raise argparse.ArgumentError(self,'must have 3 values')
custom = 'usage: %(prog)s [-h] (--list | ONE TWO THREE)'
p=argparse.ArgumentParser(prog='PROG',usage=custom)
g=p.add_mutually_exclusive_group(required=True)
g.add_argument('--list',action='store_true')
g.add_argument('pos',nargs='*',default=[],action=Three)
--list
如果同时给出和pos
,如果没有给出,或者pos
值的数量不是 3 ,它会引发错误。我包含了一个自定义用法,因为默认值是:
usage: PROG [-h] (--list | pos [pos ...])