Subcomandos e opções
Crie CLIs complexas
Subcomandos e opções é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.
Por que usar subcomandos?
Ferramentas como git têm subcomandos: git add, git commit. argparse oferece suporte a isso por meio de subanalisadores, em que cada subcomando tem seus próprios argumentos.
import argparse
parser = argparse.ArgumentParser(prog='tool')
sub = parser.add_subparsers(dest='command')
print('subparsers ready')Adicionando subanalisadores
add_subparsers retorna um objeto cujo método add_parser cria cada subcomando. dest armazena qual deles foi escolhido.
import argparse
parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='command')
sub.add_parser('start')
sub.add_parser('stop')
args = parser.parse_args(['start'])
print('command:', args.command)Argumentos por subcomando
Cada subanalisador pode definir seus próprios argumentos. O subcomando add deste exemplo recebe um nome; list não recebe nenhum.
import argparse
parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='command')
p_add = sub.add_parser('add')
p_add.add_argument('name')
sub.add_parser('list')
args = parser.parse_args(['add', 'milk'])
print(args.command, args.name)Despachando com base no comando
Depois da análise, use args.command para escolher a lógica correta.
import argparse
parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='command')
p_add = sub.add_parser('add')
p_add.add_argument('item')
sub.add_parser('clear')
args = parser.parse_args(['add', 'eggs'])
if args.command == 'add':
print('adding', args.item)
elif args.command == 'clear':
print('clearing all')set_defaults para manipuladores
Um padrão organizado associa uma função a cada subanalisador com set_defaults(func=...) e, em seguida, chama args.func(args).
import argparse
def do_hi(args):
print('hi', args.who)
parser = argparse.ArgumentParser()
sub = parser.add_subparsers()
p = sub.add_parser('hi')
p.add_argument('who')
p.set_defaults(func=do_hi)
args = parser.parse_args(['hi', 'Ana'])
args.func(args)Opções compartilhadas por meio de analisadores-pai
Um analisador-pai contém opções comuns a vários subcomandos, evitando repetição. Passe parents=[base] e add_help=False.
import argparse
base = argparse.ArgumentParser(add_help=False)
base.add_argument('--verbose', action='store_true')
parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='cmd')
sub.add_parser('run', parents=[base])
args = parser.parse_args(['run', '--verbose'])
print(args.cmd, args.verbose)Valores padrão por opção
As opções de subcomandos podem ter seus próprios valores padrão e tipos, assim como os argumentos de nível superior.
import argparse
parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='cmd')
p = sub.add_parser('scale')
p.add_argument('--factor', type=float, default=1.0)
args = parser.parse_args(['scale'])
print('factor:', args.factor)Anexando opções repetidas
action='append' permite fornecer um sinalizador várias vezes, reunindo cada valor em uma lista.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--tag', action='append', default=[])
args = parser.parse_args(['--tag', 'a', '--tag', 'b'])
print(args.tag)Contando sinalizadores
action='count' conta quantas vezes um sinalizador aparece, seguindo o padrão clássico de verbosidade -vvv.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-v', action='count', default=0)
args = parser.parse_args(['-v', '-v', '-v'])
print('verbosity level:', args.v)Uma ferramenta com dois comandos
A combinação de subcomandos, manipuladores e opções compartilhadas resulta em uma CLI estruturada com vários comandos.
import argparse
def add(args):
print('add', args.item, 'qty', args.qty)
def remove(args):
print('remove', args.item)
parser = argparse.ArgumentParser()
sub = parser.add_subparsers()
pa = sub.add_parser('add')
pa.add_argument('item')
pa.add_argument('--qty', type=int, default=1)
pa.set_defaults(func=add)
pr = sub.add_parser('remove')
pr.add_argument('item')
pr.set_defaults(func=remove)
args = parser.parse_args(['add', 'pen', '--qty', '3'])
args.func(args)Subcomando obrigatório
Defina required=True nos subanalisadores para que o usuário seja obrigado a escolher um comando; caso contrário, argparse retornará um erro.
import argparse
parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='cmd', required=True)
sub.add_parser('go')
args = parser.parse_args(['go'])
print('chosen:', args.cmd)Verificação rápida
Teste sua compreensão de subcomandos e opções.
Recapitulação
Você aprendeu subcomandos e opções:
add_subparserseadd_parsercriam ferramentas com vários comandos.set_defaults(func=...)encaminha a execução para os manipuladores.- Analisadores-pai compartilham opções comuns.
- As ações
appendecountlidam com sinalizadores repetidos.
Próximo tópico: a biblioteca Click para CLIs baseadas em decoradores.
Perguntas Frequentes
A aula “Subcomandos e opções” é grátis?
Sim — o texto completo de “Subcomandos e opções” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.
O que vou aprender em “Subcomandos e opções”?
Crie CLIs complexas Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Python Academy?
Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Subcomandos e opções”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Python Academy?
Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Noções básicas de argparse
- Subcomandos e opções
- A biblioteca Click
- Saída rica do terminal