Using SUPPRESS
对于子解析器默认值,它不会覆盖父解析器值。 ASUPPRESS
默认不插入namespace
在解析开始时。仅当用户使用该参数时才会写入值。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-f', '--foo', default='foobar')
parser.add_argument('-v', '--verbose', action='store_const', default=False, const=True)
sp = parser.add_subparsers(dest='cmd')
sp1 = sp.add_parser('cmd1')
sp1.add_argument('-f', '--foo', default=argparse.SUPPRESS)
sp1.add_argument('-v', '--verbose', action='store_const', default=argparse.SUPPRESS, const=True)
args = parser.parse_args()
print(args)
样本运行:
1833:~/mypy$ python3 stack62904585.py
Namespace(cmd=None, foo='foobar', verbose=False)
1834:~/mypy$ python3 stack62904585.py --foo FOO -v
Namespace(cmd=None, foo='FOO', verbose=True)
1834:~/mypy$ python3 stack62904585.py cmd1
Namespace(cmd='cmd1', foo='foobar', verbose=False)
1834:~/mypy$ python3 stack62904585.py -v cmd1 -f bar
Namespace(cmd='cmd1', foo='bar', verbose=True)
最后更改此行为的补丁 (2014)
https://bugs.python.org/issue9351子命令上的 argparse set_defaults 应覆盖顶级 set_defaults
also https://bugs.python.org/issue27859