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?

Ответы на вопрос(2)

Ваш ответ на вопрос