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 перед моим позиционным аргументом в подпарсере. Я читал, что могу передать исходный синтаксический анализатор в качестве родителя дочернему подпарсеру, но это не решает проблему. Я попытался добавить add_help=False и конфликт_обработчик='resolve' в начальное объявление синтаксического анализатора, когда пытался это сделать. Может ли кто-нибудь указать мне правильное направление в этом?
Спасибо, Скотт
--optional
как родителя подпарсера не решает проблему? Вы все равно должны позвонитьsubparser
, так какая разница, если вы назовете это--optional subparser POS
илиsubparser POS --optional
? Я не решаюсь назвать это ошибкой, но, читая документацию и играя, она бросает вызов моим ожиданиям :) Тем не менее, если вы можете ее обойти... - person Zach Young   schedule 02.01.2013subparser POS --optional
тоже не работает с этим кодом. - person jgritty   schedule 02.01.2013