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?

questionAnswers(1)

yourAnswerToTheQuestion