0Pricing
Python Academy · Lección

Captura de la salida

Lea stdout y stderr

Captura de la salida es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.

Capturar stdout

Para leer lo que imprime un comando, pase capture_output=True. El texto aparece en el atributo stdout del resultado.

import subprocess

cp = subprocess.run(['echo', 'hello'], capture_output=True)
print(cp.stdout)

Bytes frente a texto

De forma predeterminada, la salida son bytes. Pase text=True para obtener cadenas decodificadas, que normalmente es lo que necesita.

import subprocess

cp = subprocess.run(['echo', 'hello'], capture_output=True, text=True)
print(repr(cp.stdout))

Eliminar el salto de línea final

La salida de los comandos suele terminar en un salto de línea. Utilice .strip() para eliminarlo antes de usar el valor.

import subprocess

cp = subprocess.run(['echo', 'value'], capture_output=True, text=True)
clean = cp.stdout.strip()
print('[' + clean + ']')

Capturar stderr

Los errores normalmente se envían a stderr, que se captura por separado. Así se mantienen diferenciadas la salida normal y los mensajes de error.

import subprocess

cp = subprocess.run(['ls', '/no/such/dir'], capture_output=True, text=True)
print('stdout:', repr(cp.stdout))
print('stderr:', cp.stderr.strip())

Usar la salida en el código

La salida capturada es simplemente una cadena, por lo que puede analizarla: dividirla en líneas, convertir números o pasarla al resto del 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)

Redirigir stderr a stdout

Para combinar la salida de error con el flujo normal, establezca stderr=subprocess.STDOUT. Ambas aparecerán entonces en stdout.

import subprocess

cp = subprocess.run(['ls', '/no/such/dir'], stdout=subprocess.PIPE,
                    stderr=subprocess.STDOUT, text=True)
print(cp.stdout.strip())

Proporcionar entrada

Proporcione datos a la entrada estándar de un comando mediante el argumento input. Aquí enviamos texto a cat.

import subprocess

cp = subprocess.run(['cat'], input='piped in\n', capture_output=True, text=True)
print(cp.stdout.strip())

La alternativa check_output

subprocess.check_output() ejecuta un comando y devuelve directamente su stdout, generando una excepción en caso de error. Es una forma práctica de capturar la salida en una sola línea.

import subprocess

out = subprocess.check_output(['echo', 'quick'], text=True)
print(out.strip())

Descartar la salida

Para silenciar un comando, redirija sus flujos a subprocess.DEVNULL.

import subprocess

cp = subprocess.run(['echo', 'silent'], stdout=subprocess.DEVNULL)
print('return code only:', cp.returncode)

Gestionar errores con salida

Al utilizar check=True, la excepción CalledProcessError generada aún contiene los valores capturados de output y stderr para el 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())

Integrarlo todo

Una función auxiliar habitual ejecuta un comando, comprueba que se haya completado correctamente y devuelve texto limpio. Esto encapsula el patrón más común.

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']))

Comprobación rápida

Compruebe su comprensión de la captura de salida.

Resumen

Ha aprendido a capturar la salida:

  • capture_output=True junto con text=True proporciona stdout y stderr como cadenas.
  • Combine los flujos con stderr=subprocess.STDOUT; siléncielos con DEVNULL.
  • Proporcione la entrada mediante input=; check_output es una alternativa abreviada.
  • Los errores contienen la salida capturada para facilitar la depuración.

A continuación: leer variables de entorno y el módulo os.

Preguntas frecuentes

¿La lección «Captura de la salida» es gratis?

Sí — el texto completo de «Captura de la salida» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Captura de la salida»?

Lea stdout y stderr Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Python Academy?

No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Captura de la salida»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Python Academy?

Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Ejecución de comandos con subprocess
  2. Captura de la salida
  3. Entorno y módulo os
  4. shutil para operaciones con archivos
← Volver a Python Academy