argparse необязательный позиционный аргумент и аргументы подпарсеров
У меня есть скрипт Python, который принимает необязательный позиционный аргумент и имеет несколько подкоманд. Некоторые из этих подкоманд требуют позиционного аргумента, некоторые нет. У меня возникает проблема, когда я пытаюсь использовать подкоманду, которая не требует позиционного аргумента. Рассмотрим следующий тестовый файл:
import argparse
argp = argparse.ArgumentParser()
argp.add_argument('inputfile', type=str, nargs='?',
help='input file to process')
argp.add_argument('--main_opt1', type=str,
help='global option')
subp = argp.add_subparsers(title='subcommands',
dest='parser_name',
help='additional help',
metavar="")
tmpp = subp.add_parser('command1', help='command1 help')
tmpp.add_argument('pos_arg1', type=str,
help='positional argument')
print repr(argp.parse_args())
Когда я пытаюсь использовать подкомандуcommand1
с первым аргументом все идет хорошо.
macbook-pro:~ jmlopez$ python pytest.py filename command1 otherarg
Namespace(inputfile='filename', main_opt1=None, parser_name='command1', pos_arg1='otherarg')
Но теперь давайте предположим, чтоcommand1
Безразлично»Мне нужен первый позиционный аргумент.
macbook-pro:~ jmlopez$ python pytest.py command1 otherarg
usage: pytest.py [-h] [--main_opt1 MAIN_OPT1] [inputfile] ...
pytest.py: error: argument : invalid choice: 'otherarg' (choose from 'command1')
Я как-то ожидалinputfile
быть установленным наNone
, Есть ли способ, которымargparse
могу предсказать, чтоcommand1
на самом деле подкоманда и, следовательно,inputfile
должно быть установлено на None?