Я следующий код (с помощью Python 2.7):argparse опционально subparser (для --version)
# shared command line options, like --version or --verbose
parser_shared = argparse.ArgumentParser(add_help=False)
parser_shared.add_argument('--version', action='store_true')
# the main parser, inherits from `parser_shared`
parser = argparse.ArgumentParser(description='main', parents=[parser_shared])
# several subcommands, which can't inherit from the main parser, since
# it would expect subcommands ad infinitum
subparsers = parser.add_subparsers('db', parents=[parser_shared])
...
args = parser.parse_args()
Теперь я хотел бы быть в состоянии назвать эту программу, например, с --version
приложенном к нормальной программе или какой-то подкоманде:
$ prog --version
0.1
$ prog db --version
0.1
В принципе, мне нужно объявить дополнительные subparsers. Я знаю, что это не really supported, но есть ли какие-либо обходные пути или альтернативы?
Edit: Сообщение об ошибке я получаю:
$ prog db --version
# works fine
$ prog --version
usage: ....
prog: error: too few arguments
Обратите внимание, что мы ждем этой основной функции с 2009 года. – yac
Я начал использовать docopt вместо встроенного анализатора аргументов. Он поддерживает смешанное использование с или без «действий», иначе называемых «глаголами». http://docopt.org/ –