~~ на самом деле, пока я на нем, у меня установлен 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, Что мне здесь не хватает?

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

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