3 usuarios conectados

Automatización y scripting. Automatización de tareas del sistema operativo

Comparte esto

Automatización y scripting. Automatización de tareas del sistema operativo

Compra libros de Python en Amazon al mejor precio

Ahora vamos a explorar cómo Python puede ser una herramienta poderosa para la automatización de tareas del sistema operativo utilizando los módulos os y subprocess. Estos módulos permiten interactuar con el sistema operativo directamente desde tus scripts de Python, automatizando tareas que de otra manera tendrías que realizar manualmente a través de la línea de comandos o la interfaz gráfica.

Módulo os:

El módulo os proporciona una forma de usar funcionalidades dependientes del sistema operativo, como interactuar con el sistema de archivos, ejecutar comandos, gestionar procesos y obtener información del entorno.

Tareas Comunes con el Módulo os:

Ejemplo Básico con el Módulo os:

Python
 
import os

# Obtener el directorio actual
cwd = os.getcwd()
print(f"Directorio de trabajo actual: {cwd}")

# Listar archivos en el directorio actual
archivos = os.listdir()
print(f"Archivos en el directorio actual: {archivos}")

# Crear un nuevo directorio (si no existe)
nuevo_dir = "mi_nuevo_directorio"
if not os.path.exists(nuevo_dir):
    os.mkdir(nuevo_dir)
    print(f"Directorio '{nuevo_dir}' creado.")
else:
    print(f"El directorio '{nuevo_dir}' ya existe.")

# Unir una ruta
ruta_completa = os.path.join(cwd, nuevo_dir, "mi_archivo.txt")
print(f"Ruta completa: {ruta_completa}")

# Ejecutar un comando (usar con precaución)
# os.system("ls -l") # En sistemas Unix/Linux
# os.system("dir")  # En Windows

# Obtener variables de entorno
path_env = os.environ.get("PATH")
if path_env:
    print(f"Variable de entorno PATH: {path_env[:100]}...")

Módulo subprocess:

El módulo subprocess proporciona una forma más potente y flexible de ejecutar y controlar procesos hijo. Permite interactuar con los comandos del sistema, capturar su salida, enviarles entrada y gestionar sus códigos de retorno.

Funciones Clave del Módulo subprocess:

Ejemplo Básico con el Módulo subprocess:

Python
 
import subprocess

# Ejecutar un comando y capturar la salida (recomendado)
try:
    resultado = subprocess.run(['ls', '-l'], capture_output=True, text=True, check=True) # Unix/Linux
    # resultado = subprocess.run(['dir'], capture_output=True, text=True, check=True) # Windows
    print("Salida del comando:")
    print(resultado.stdout)
    print("Código de retorno:", resultado.returncode)
except subprocess.CalledProcessError as e:
    print(f"Error al ejecutar el comando: {e}")
    print(f"Salida de error: {e.stderr}")

# Ejecutar un comando con shell=True (usar con precaución)
try:
    resultado_shell = subprocess.run('ls -l | grep ".py"', capture_output=True, text=True, shell=True, check=True) # Unix/Linux
    # resultado_shell = subprocess.run('dir | findstr ".py"', capture_output=True, text=True, shell=True, check=True) # Windows
    print("\nSalida del comando con shell:")
    print(resultado_shell.stdout)
except subprocess.CalledProcessError as e:
    print(f"Error al ejecutar el comando con shell: {e}")

# Ejecutar un comando y obtener un objeto Popen para interacción
proceso = subprocess.Popen(['ping', '-c', '3', 'google.com'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) # Unix/Linux
# proceso = subprocess.Popen(['ping', '-n', '3', 'google.com'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) # Windows

stdout, stderr = proceso.communicate(timeout=10)
print("\nSalida del ping:")
print(stdout)
print("Error del ping:")
print(stderr)
print("Código de retorno del ping:", proceso.returncode)

Cuándo Usar os vs. subprocess:

Con los módulos os y subprocess, Python se convierte en una herramienta muy versátil para automatizar una amplia gama de tareas del sistema operativo, desde la gestión de archivos hasta la ejecución de comandos complejos y la interacción con otros programas. Recuerda siempre considerar la seguridad al ejecutar comandos externos, especialmente si la entrada proviene de fuentes no confiables.