Ejecución de comandos con subprocess
Ejecute programas externos
Ejecución de comandos con subprocess es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 1 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.
¿Qué es subprocess?
El módulo subprocess permite que su programa de Python ejecute comandos externos y otros programas, igual que si los escribiera en un terminal.
import subprocess
result = subprocess.run(['echo', 'hello'])
print('return code:', result.returncode)Conceptos básicos de subprocess.run
subprocess.run() es el punto de entrada recomendado. El comando se pasa como una lista de argumentos: primero el nombre del programa y después cada argumento por separado.
import subprocess
result = subprocess.run(['echo', 'one', 'two'])
print('done with code', result.returncode)¿Por qué una lista y no una cadena?
Pasar una lista evita que el shell analice el comando, lo que previene errores de comillas y riesgos de inyección de comandos en el shell. Cada elemento es un argumento.
import subprocess
# Safe: each piece is its own argument
subprocess.run(['echo', 'a file with spaces.txt'])El objeto CompletedProcess
run() devuelve un CompletedProcess que contiene args, returncode y, si se ha capturado, la salida. El código 0 indica éxito.
import subprocess
cp = subprocess.run(['true'])
print('args:', cp.args)
print('returncode:', cp.returncode)Comprobar los códigos de retorno
Un código de retorno distinto de cero normalmente indica que el comando ha fallado. Puede inspeccionarlo manualmente después de la llamada.
import subprocess
cp = subprocess.run(['ls', '/no/such/path'])
if cp.returncode != 0:
print('command failed with', cp.returncode)Generar una excepción en caso de error con check=True
Pase check=True para que run() genere automáticamente una excepción CalledProcessError cuando el comando termine con un código distinto de cero.
import subprocess
try:
subprocess.run(['false'], check=True)
except subprocess.CalledProcessError as e:
print('failed with code', e.returncode)Pasar argumentos
Los argumentos adicionales del comando son simplemente más elementos de la lista. Aquí mostramos el contenido de un directorio en formato detallado.
import subprocess
subprocess.run(['echo', '-n', 'no newline'])
print()
print('above echo had -n flag')Establecer un tiempo de espera
Utilice timeout para abortar un comando que tarde demasiado. Esto genera una excepción TimeoutExpired.
import subprocess
try:
subprocess.run(['sleep', '5'], timeout=0.1)
except subprocess.TimeoutExpired:
print('command took too long, aborted')Directorio de trabajo
El argumento cwd ejecuta el comando en un directorio específico sin cambiar el directorio de trabajo de su propio programa.
import subprocess
subprocess.run(['pwd'], cwd='/tmp')La opción shell=True
Con shell=True, se pasa una única cadena de comando que interpreta el shell. Esto permite usar tuberías y patrones comodín, pero es arriesgado con entradas que no sean de confianza. Prefiera la forma de lista.
import subprocess
subprocess.run('echo hello && echo world', shell=True)Evitar os.system
El antiguo os.system solo devuelve un código de salida y no ofrece una forma segura de pasar argumentos ni de capturar la salida. subprocess.run lo reemplaza en todo código nuevo.
import subprocess
# Modern, safe approach
cp = subprocess.run(['echo', 'modern way'])
print('exit code:', cp.returncode)Comprobación rápida
Compruebe su comprensión de la ejecución de comandos.
Resumen
Ha aprendido a ejecutar comandos con subprocess:
subprocess.run([...])ejecuta un programa externo de forma segura.- Devuelve un
CompletedProcessconreturncode. check=Truegenera una excepción en caso de error;timeoutaborta los comandos lentos.- Prefiera la forma de lista a
shell=True.
A continuación: capturar la salida del comando.
Preguntas frecuentes
¿La lección «Ejecución de comandos con subprocess» es gratis?
Sí — el texto completo de «Ejecución de comandos con subprocess» 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 «Ejecución de comandos con subprocess»?
Ejecute programas externos 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 1 de 4.
¿Cuánto tiempo toma la lección «Ejecución de comandos con subprocess»?
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
- Ejecución de comandos con subprocess
- Captura de la salida
- Entorno y módulo os
- shutil para operaciones con archivos