argparse - Combinando analisador pai, sub-analisadores e valores padrão
Eu queria definir diferentes sub-analisadores em um script, com as duas opções herdadas de um pai comum, mas com padrões diferentes. Porém, não funciona como esperado.
Aqui está o que eu fiz:
import argparse
# this is the top level parser
parser = argparse.ArgumentParser(description='bla bla')
# this serves as a parent parser
base_parser = argparse.ArgumentParser(add_help=False)
base_parser.add_argument('-n', help='number', type=int)
# subparsers
subparsers = parser.add_subparsers()
subparser1= subparsers.add_parser('a', help='subparser 1',
parents=[base_parser])
subparser1.set_defaults(n=50)
subparser2 = subparsers.add_parser('b', help='subparser 2',
parents=[base_parser])
subparser2.set_defaults(n=20)
args = parser.parse_args()
print args
Quando executo o script na linha de comando, é isso que recebo:
$ python subparse.py b
Namespace(n=20)
$ python subparse.py a
Namespace(n=20)
Aparentemente, o segundoset_defaults
substitui o primeiro no pai. Como não havia nada sobre isso na documentação do argparse (que é bastante detalhada), pensei que isso poderia ser um bug.
Existe alguma solução simples para isso? Eu poderia verificar oargs
variável depois e substituaNone
valores com os padrões pretendidos para cada sub-analisador, mas é o que eu esperava que o argparse fizesse por mim.
Este é o Python 2.7, a propósito.