~~ на самом деле, пока я на нем, у меня установлен python2.7, давайте посмотрим, будет ли поведение таким же ~~ поведение такое же в 2.7.14 как 3.6.2
ользую argparse с несколькими подпарсерами. Я хочу, чтобы моя программа использовала опции для многословия в любом месте аргументов, включая подпарапер.
from argparse import ArgumentParser
p = ArgumentParser()
p.add_argument('--verbose', '-v', action='count')
sub = p.add_subparsers()
a = sub.add_parser('a')
print(p.parse_args())
По умолчанию параметры основного синтаксического анализатора выдают ошибку, если используются для подпарасеров:
$ python tmp.py -v a
Namespace(verbose=1)
$ python tmp.py a -v
usage: tmp.py [-h] [--verbose] {a} ...
tmp.py: error: unrecognized arguments: -v
Я посмотрел в родительские парсеры, изэтот ответ.
from argparse import ArgumentParser
parent = ArgumentParser(add_help=False)
parent.add_argument('--verbose', '-v', action='count')
main = ArgumentParser(parents=[parent])
sub = main.add_subparsers()
a = sub.add_parser('a', parents=[parent])
print(main.parse_args())
По какой-то причине ни один из общих флагов не работает в главном парсере.
$ python tmp2.py a -vvv
Namespace(verbose=3)
$ python tmp2.py -vvv a
Namespace(verbose=None)
Обратите внимание, что основной синтаксический анализатор определенно имеет соответствующие аргументы, потому что, когда я изменяю его наmain = ArgumentParser()
я получилerror: unrecognized arguments: -v
, Что мне здесь не хватает?