import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
'--optional',
default=None,
const='some-const',
nargs='?',
help='optional')
subparsers = parser.add_subparsers()
subparser = subparsers.add_parser('subparser')
subparser.add_argument(
'positional',
help='positional')
args = parser.parse_args()
print args
./test.py --optional opt subparser positional
Namespace(optional='opt', positional='positional') <-- works as expected
./test.py --optional subparser positional
usage: test.py [-h] [--optional [OPTIONAL]] {subparser} ...
test.py: error: invalid choice: 'positional' (choose from 'subparser') <-- throws an error
Namespace(optional='some-const', positional='positional') <-- would expect to see this
以上是我演示这个问题的最简单的测试代码。我想有一个使用 nargs='?' 的可选参数 和 const在子解析器中我的位置 arg 之前。我读过我可以将原始解析器作为父子解析器传递给子子解析器,但这并不能解决问题。当我尝试这样做时,我尝试将 add_help=False 和 conflict_handler='resolve' 添加到初始解析器声明中。谁能指出我正确的方向?
谢谢,斯科特