Saltar al contenido principal

Entorno y Procesos

Python permite interactuar directamente con el entorno de ejecución del intérprete y con el sistema operativo a través de módulos estándar. Entre ellos destacan dos especialmente útiles:

  • sys, que ofrece acceso a información y funciones internas del intérprete de Python.
  • subprocess, que permite ejecutar comandos del sistema operativo o programas externos desde un script.

Ambos módulos resultan fundamentales en la automatización de tareas, el control del flujo de ejecución y la integración de Python con otros sistemas.


1️⃣ Módulo sys​

sys es un módulo integrado que se carga automáticamente al iniciar cualquier programa en Python. Su principal objetivo es permitir la comunicación entre el programa y el intérprete, lo que lo convierte en una herramienta clave para escribir scripts que reaccionen a condiciones del entorno o se comporten de forma >dinámica según los parámetros de entrada.

Para utilizarlo se importa con:

import sys

🟩 Funciones principales​

Atributo / FunciónDescripciónEjemplo
sys.versionDevuelve la versión actual de Python.print(sys.version)
sys.platformIndica el sistema operativo actual.'win32', 'linux', 'darwin',
sys.argvLista con los argumentos de la línea de comandos.sys.argv[0] → nombre del script
sys.exit([código])Finaliza el programa de forma controlada.sys.exit(0)
sys.pathLista de rutas donde Python busca los módulos importados.print(sys.path)
sys.stdin, sys.stdout, sys.stderrFlujo estándar de entrada, salida y error.sys.stderr.write("Error...")

🟦 Ejemplos prácticos​

Ejemplo 1: mostrar información del entorno​

Información del intérprete y sistema
import sys

print("Versión de Python:", sys.version)
print("Sistema operativo:", sys.platform)
print("Ruta de búsqueda de módulos:")
for ruta in sys.path:
print("-", ruta)
en este ejemplo
  • Este ejemplo muestra cómo obtener información sobre el entorno de ejecución.
  • La lista sys.path incluye las carpetas donde el intérprete busca los módulos importados.

Ejemplo 2: uso de argumentos por línea de comandos​

Lectura de argumentos desde la terminal
import sys

if len(sys.argv) > 1:
print("Argumentos recibidos:", sys.argv[1:])
else:
print("No se han pasado argumentos.")
en este ejemplo
  • Los argumentos pasados al ejecutar el script (por ejemplo, python programa.py datos.txt) se almacenan en la lista sys.argv.
  • El primer elemento (sys.argv[0]) es el nombre del archivo ejecutado.

Ejemplo 3: finalización controlada del programa​

Uso de sys.exit()
import sys

numero = int(input("Introduce un número positivo: "))

if numero < 0:
print("Error: el número no puede ser negativo.")
sys.exit(1)

print("Número válido:", numero)
en este ejemplo
  • sys.exit() detiene la ejecución del programa y puede devolver un código de salida al sistema operativo.
  • Por convención, 0 indica finalización correcta y cualquier otro valor señala un error o condición especial.

🟨 Casos de uso comunes​

  • Obtener información del sistema y de la versión de Python.
  • Leer argumentos de línea de comandos.
  • Controlar la salida del programa.
  • Redirigir flujos de entrada o salida.
  • Personalizar rutas de búsqueda de módulos (sys.path).

2️⃣ Módulo subprocess​

El módulo subprocess actúa como un puente entre Python y el sistema operativo. Permite lanzar otros programas, comunicarse con ellos, capturar su salida o incluso enviarles datos de entrada. Esto resulta muy útil cuando se combinan herramientas externas con scripts de automatización.

Debe importarse con:

import subprocess

🟩 Funciones principales​

FunciónDescripciónEjemplo
subprocess.run(comando, ...)Ejecuta un comando y espera su finalización. (Bloqueante)subprocess.run(["ls", "-l"])
subprocess.check_output(comando)Ejecuta un comando y devuelve su salida como texto. (Bloqueante)subprocess.check_output("ping", text=True)
subprocess.Popen()Crea un proceso avanzado con control total. (No Bloqueante)subprocess.Popen(["ping", "google.com"])

🟦 Ejemplos prácticos​

Ejemplo 1: ejecutar un comando simple​

Ejecución de un comando del sistema
import subprocess

subprocess.run(["echo", "Hola desde Python"])
en este ejemplo
  • El comando echo se ejecuta igual que en la terminal del sistema.
  • subprocess.run() espera a que el proceso termine antes de continuar con el programa.

Ejemplo 2: capturar la salida de un comando​

Capturar salida de un proceso externo
import subprocess

resultado = subprocess.run(["python", "--version"], capture_output=True, text=True)
print("Salida del comando:", resultado.stdout)
en este ejemplo
  • El parámetro capture_output=True redirige la salida del comando a un objeto, mientras que text=True convierte los bytes a texto legible.
  • Esto permite procesar o analizar los resultados directamente desde Python.

Ejemplo 3: uso de check_output()​

Almacenar el resultado de un comando
import subprocess

fecha = subprocess.check_output(["date"], text=True)
print("La fecha actual es:", fecha.strip())
en este ejemplo
  • check_output() ejecuta un comando y devuelve su salida directamente.
  • Se utiliza strip() para eliminar el salto de línea final.

Ejemplo 4: ejecutar comandos complejos (modo shell)​

Ejecución en shell
import subprocess

subprocess.run("dir" if subprocess.os.name == "nt" else "ls -l", shell=True)
en este ejemplo
  • El argumento shell=True permite ejecutar comandos complejos o con tuberías.
  • El ejemplo selecciona automáticamente el comando adecuado según el sistema operativo.

Ejemplo 5: comunicación entre procesos​

Comunicación con procesos usando Popen
import subprocess

proceso = subprocess.Popen(["python", "-c", "print('Hola mundo')"], stdout=subprocess.PIPE, text=True)
salida, _ = proceso.communicate()

print("Salida recibida:", salida)
en este ejemplo
  • Con Popen se obtiene un control completo del proceso.
  • El método communicate() permite leer su salida o enviarle datos de entrada.

🟨 Casos de uso comunes​

  • Automatización de tareas del sistema (copias, despliegues, limpieza).
  • Integración con herramientas externas (Git, sistemas de backup, compiladores).
  • Captura de resultados de programas o scripts externos.
  • Ejecución de procesos en paralelo o en segundo plano.
  • Sustitución de os.system() en código moderno.

📊 Tabla resumen​

MóduloPropósito principalEjemplo representativo
sysInteractuar con el intérprete y gestionar argumentos, rutas o salidas.sys.argv, sys.exit()
subprocessEjecutar comandos del sistema y controlar procesos externos.subprocess.run(["ls", "-l"])

Los módulos sys y subprocess amplían significativamente las capacidades de Python al permitir comunicarse con el sistema operativo y controlar el entorno de ejecución. Su dominio es clave para tareas de automatización, administración de sistemas o integración con herramientas externas, convirtiendo a Python en una poderosa herramienta de trabajo tanto en entornos de usuario como de servidor.