0Pricing
Python Academy · Aula

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_subparsers e add_parser criam ferramentas com vários comandos.
  • set_defaults(func=...) encaminha a execução para os manipuladores.
  • Analisadores-pai compartilham opções comuns.
  • As ações append e count lidam 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

  1. Noções básicas de argparse
  2. Subcomandos e opções
  3. A biblioteca Click
  4. Saída rica do terminal
← Voltar para Python Academy