Como você obtém o argparse para escolher um sub-analisador padrão?
Eu tenho o seguinte código emscript.py
:
import argparse
parser = argparse.ArgumentParser()
sp = parser.add_subparsers(dest='command')
sp.default = 'a'
a_parser = sp.add_parser('a')
b_parser = sp.add_parser('b')
a_parser.add_argument('--thing', default='thing')
b_parser.add_argument('--nothing', default='nothing')
args = parser.parse_args()
print(args)
Eu posso chamar isso de três maneiras diferentes:
$ python3 script.py
Namespace(command='a')
$ python3 script.py a
Namespace(command='a', thing='thing')
$ python3 script.py b
Namespace(command='b', nothing='nothing')
Há apenas um problema com isso: o que euquer é que se eu fornecer zero argumentos na linha de comando é paraa_parser
ser aquele que acaba analisando e fazendo coisas. Claramente não é, osp.default
está apenas definindocommand='a'
, não o que eu espero, ou seja, "Ah, sim, o usuário não forneceu nenhum argumento na linha de comando, mas eu sei que isso deve ser processado pora_parser
. Aqui estáNamespace(command='a', thing='thing')
! "
Existe uma maneira que eupode fazer isso com argparse? Procurei algumas opções diferentes, mas nenhuma delas realmente fornece o que estou procurando. Eu acho que eu poderia fazer alguma coisa complicada ao criar 3 ArgumentParsers distintos e depois passar os argumentos para cada um deles, embora isso pareça um pouco nojento.
Alguma opção melhor?