Captura da saída
Leia stdout e stderr
Captura da saída é 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.
Capturando stdout
Para ler o que um comando imprime, passe capture_output=True. O texto aparece no atributo stdout do resultado.
import subprocess
cp = subprocess.run(['echo', 'hello'], capture_output=True)
print(cp.stdout)Bytes e texto
Por padrão, a saída é composta por bytes. Passe text=True para obter cadeias de caracteres decodificadas, que geralmente é o que você deseja.
import subprocess
cp = subprocess.run(['echo', 'hello'], capture_output=True, text=True)
print(repr(cp.stdout))Removendo a quebra de linha final
A saída de comandos geralmente termina com uma quebra de linha. Use .strip() para removê-la antes de usar o valor.
import subprocess
cp = subprocess.run(['echo', 'value'], capture_output=True, text=True)
clean = cp.stdout.strip()
print('[' + clean + ']')Capturando stderr
Os erros normalmente vão para stderr, que é capturado separadamente. Assim, a saída normal e as mensagens de erro permanecem distintas.
import subprocess
cp = subprocess.run(['ls', '/no/such/dir'], capture_output=True, text=True)
print('stdout:', repr(cp.stdout))
print('stderr:', cp.stderr.strip())Usando a saída no código
A saída capturada é apenas uma cadeia de caracteres, portanto você pode analisá-la: separar linhas, converter números ou passá-la ao restante do seu programa.
import subprocess
cp = subprocess.run(['printf', 'a\nb\nc\n'], capture_output=True, text=True)
lines = cp.stdout.splitlines()
print('line count:', len(lines))
print(lines)Redirecionando stderr para stdout
Para combinar a saída de erro com o fluxo normal, defina stderr=subprocess.STDOUT. Ambos aparecerão em stdout.
import subprocess
cp = subprocess.run(['ls', '/no/such/dir'], stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, text=True)
print(cp.stdout.strip())Fornecendo entrada
Envie dados para a entrada padrão de um comando com o argumento input. Aqui, encaminhamos texto para cat.
import subprocess
cp = subprocess.run(['cat'], input='piped in\n', capture_output=True, text=True)
print(cp.stdout.strip())Atalho check_output
subprocess.check_output() executa um comando e retorna diretamente seu stdout, gerando uma exceção em caso de falha. É uma forma conveniente de capturar a saída em uma única linha.
import subprocess
out = subprocess.check_output(['echo', 'quick'], text=True)
print(out.strip())Descartando a saída
Para silenciar um comando, redirecione seus fluxos para subprocess.DEVNULL.
import subprocess
cp = subprocess.run(['echo', 'silent'], stdout=subprocess.DEVNULL)
print('return code only:', cp.returncode)Lidando com erros e saída
Ao usar check=True, o CalledProcessError gerado ainda contém output e stderr capturados para diagnóstico.
import subprocess
try:
subprocess.run(['ls', '/missing'], capture_output=True, text=True, check=True)
except subprocess.CalledProcessError as e:
print('failed:', e.returncode)
print('stderr:', e.stderr.strip())Juntando tudo
Uma função auxiliar típica executa um comando, verifica se ele foi bem-sucedido e retorna texto limpo. Ela encapsula o padrão comum.
import subprocess
def capture(cmd):
cp = subprocess.run(cmd, capture_output=True, text=True, check=True)
return cp.stdout.strip()
print(capture(['echo', 'final result']))Verificação rápida
Teste sua compreensão da captura de saída.
Recapitulação
Você aprendeu a capturar a saída:
capture_output=Truejunto comtext=Truefornecestdoutestderrcomo cadeias de caracteres.- Combine os fluxos com
stderr=subprocess.STDOUT; silencie-os comDEVNULL. - Forneça a entrada por meio de
input=;check_outputé um atalho. - Os erros carregam a saída capturada para depuração.
A seguir: lendo variáveis de ambiente e usando o módulo os.
Perguntas Frequentes
A aula “Captura da saída” é grátis?
Sim — o texto completo de “Captura da saída” é 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 “Captura da saída”?
Leia stdout e stderr 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 “Captura da saída”?
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
- Execução de comandos com subprocess
- Captura da saída
- Ambiente e módulo os
- shutil para operações com arquivos