Ответ 1
Изменить: Обратитесь к квонскому ответу на этот вопрос, который лучше моего и должен быть принятым ответом.
В соответствии с документацией argparse результат parser.parse_args(...)
будет содержать только атрибуты для основного синтаксического анализатора и выбранного дополнительного парсера ". К сожалению, это может быть недостаточно для определения того, какой суб-парсер использовался. В документации для решения этой проблемы рекомендуется использовать метод set_defaults(...)
на вспомогательном парсере.
Например, я добавил вызовы set_defaults()
к вашему коду:
import argparse
parser = argparse.ArgumentParser( version='pyargparsetest 1.0' )
subparsers = parser.add_subparsers(help='commands')
# all
all_parser = subparsers.add_parser('all', help='process all apps')
all_parser.set_defaults(which='all')
# app
app_parser = subparsers.add_parser('app', help='process a single app')
app_parser.add_argument('appname', action='store', help='name of app to process')
app_parser.set_defaults(which='app')
Теперь, если вы запустите
print parser.parse_args(["all"])
Результат
Namespace(which='all')
Обратитесь к документации add_subparsers()
для получения дополнительной информации и другого примера.