Argparse - Como especificar um subcomando padrão

Estou usando o pacote argparse do Python 2.7 para escrever alguma lógica de análise de opção para uma ferramenta de linha de comando. A ferramenta deve aceitar um dos seguintes argumentos:

"ON": ativa uma função.
"OFF": desativa uma função.
[Nenhum argumento fornecido]: reproduz o estado atual da função.

Examinar a documentação da argparse me levou a acreditar que eu queria definir dois - possivelmente três - subcomandos, uma vez que esses três estados são mutuamente exclusivos e representam diferentes atividades conceituais. Esta é minha tentativa atual no código:

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
parser.set_defaults(func=print_state) # I think this line is wrong.

parser_on = subparsers.add_parser('ON')
parser_on.set_defaults(func=set_state, newstate='ON')

parser_off = subparsers.add_parser('OFF')
parser_off.set_defaults(func=set_state, newstate='OFF')

args = parser.parse_args()

if(args.func == set_state):
    set_state(args.newstate)
elif(args.func == print_state):
    print_state()
else:
    args.func() # Catchall in case I add more functions later

Fiquei com a impressão de que, se fornecesse 0 argumentos, o analisador principal definiriafunc=print_state, e se eu fornecesse 1 argumento, o analisador principal usaria os padrões do subcomando apropriado e chamariafunc=set_state. Em vez disso, recebo o seguinte erro com 0 argumentos:

usage: cvsSecure.py [-h] {ON,OFF} ...
cvsSecure.py: error: too few arguments

E se eu fornecer "OFF" ou "ON",print_state é chamado em vez deset_state. Se eu comentar oparser.set_defaults linha,set_state é chamado corretamente.

Sou um programador em nível de viajante, mas um iniciante no Python. Alguma sugestão sobre como posso fazer isso funcionar?

Editar: Outra razão pela qual eu estava olhando para subcomandos foi uma quarta função potencial que estou considerando para o futuro:

"FORCE txtval": defina o estado da função comotxtval.

questionAnswers(2)

yourAnswerToTheQuestion