PYTHON – DÍA 6
Librerías esenciales: os, sys, subprocess, json
1. Objetivo del día
Aprender a usar las librerías estándar más importantes para automatización:
- os → interacción con el sistema
- sys → argumentos y estado del intérprete
- subprocess → ejecutar comandos del sistema
- json → leer y escribir datos estructurados
Con ellas podrás hacer scripts reales de administración, monitorización y DevOps.
2. Teoría esencial (5–10 minutos)
2.1. Módulo os
Permite trabajar con:
- rutas y directorios
- variables de entorno
- listar archivos
- obtener información del sistema
Ejemplos:
import os
print(os.getcwd()) # directorio actual
print(os.listdir()) # lista de archivos
print(os.getenv("HOME")) # variable de entorno
2.2. Módulo sys
Controla la interacción con Python:
import sys
print(sys.argv) # argumentos del script
print(sys.version)
El primer argumento (sys.argv[1]) lo usamos en el Día 1.
2.3. Módulo subprocess
Permite ejecutar comandos del sistema desde Python.
Ejemplo básico:
import subprocess
resultado = subprocess.run(["ls", "-l"])
Guardar salida:
salida = subprocess.check_output(["whoami"])
print(salida.decode())
2.4. Módulo json
Muy útil para:
- APIs
- logs estructurados
- configuraciones
- integraciones
Convertir diccionario → JSON:
import json
data = {"nombre": "server1", "ip": "10.0.0.5"}
json_texto = json.dumps(data, indent=4)
print(json_texto)
Leer JSON → diccionario:
obj = json.loads(json_texto)
print(obj["ip"])
3. Práctica guiada (aprox. 50 minutos)
3.1. Trabajar con rutas y ficheros (os)
Crear archivo:
nano rutas_os.py
Contenido:
import os
print("Directorio actual:", os.getcwd())
print("Archivos en este directorio:")
for nombre in os.listdir():
print("-", nombre)
print("Variable de entorno HOME:", os.getenv("HOME"))
Ejecuta y observa.
3.2. Usar sys.argv para argumentos avanzados
nano argumentos.py
Contenido:
import sys
if len(sys.argv) < 2:
print("Uso: python3 argumentos.py <nombre>")
sys.exit()
nombre = sys.argv[1]
print("Hola,", nombre)
Ejecuta:
python3 argumentos.py Tomas
3.3. Ejecutar comandos del sistema (subprocess)
nano ejecutar_comando.py
Contenido:
import subprocess
print("Ejecutando 'whoami'...")
salida = subprocess.check_output(["whoami"])
print("Usuario actual:", salida.decode().strip())
Prueba también:
["ls", "-l"]en Linux/Mac["dir"]en Windows (necesitarásshell=True)
3.4. Ejecutar comandos con errores controlados
nano comando_seguro.py
Contenido:
import subprocess
try:
salida = subprocess.check_output(["ls", "/directorio_inexistente"])
print(salida.decode())
except subprocess.CalledProcessError as e:
print("Error al ejecutar el comando.")
print("Código de retorno:", e.returncode)
3.5. Trabajar con JSON (guardar)
Crear:
nano guardar_json.py
Contenido:
import json
servidor = {
"nombre": "web01",
"ip": "192.168.1.10",
"estado": "activo"
}
with open("servidor.json", "w") as f:
json.dump(servidor, f, indent=4)
print("Archivo JSON creado.")
3.6. Leer JSON (cargar)
nano leer_json.py
Contenido:
import json
with open("servidor.json", "r") as f:
datos = json.load(f)
print("Información del servidor:")
print("Nombre:", datos["nombre"])
print("IP:", datos["ip"])
print("Estado:", datos["estado"])
3.7. Ejemplo profesional: ejecutar un comando y guardar salida en JSON
nano cmd_a_json.py
Contenido:
import subprocess
import json
# Ejecutar comando
salida = subprocess.check_output(["whoami"]).decode().strip()
# Crear objeto JSON
info = {
"usuario_actual": salida
}
# Guardar en fichero
with open("info.json", "w") as f:
json.dump(info, f, indent=4)
print("Información guardada en info.json")
4. Checklist del Día 6
- Has usado
ospara rutas y variables - Has manejado argumentos con
sys - Has ejecutado comandos con
subprocess - Has controlado errores de comandos
- Has creado y leído archivos JSON
- Has combinado subprocess + JSON
Si todo está marcado, estás a nivel profesional básico.
5. Errores frecuentes
| Problema | Solución |
|---|---|
| Error “FileNotFoundError” con subprocess | Comando mal escrito o ruta no válida |
| Salida en bytes en lugar de texto | Usar .decode() |
| JSON mal formateado | Revisar comas y llaves |
| Problemas al abrir JSON | Archivo vacío o corrupto |
KeyError al acceder a valores | Verifica nombres exactos de claves |
6. Ejercicio opcional (con solución aparte)
Crear un script estado_sistema.py que:
- Ejecute el comando
- Linux/Mac:
uptime - Windows:
systeminfo(solo un fragmento, por ejemplo el nombre del host)
- Linux/Mac:
- Convierta parte de la salida en un diccionario
- Guarde el resultado en
estado.json - Muestre en pantalla:
Estado guardado en estado.json
La solución estará en:Soluciones propuestas
7. Día 6 completado
Has aprendido a conectar Python con el sistema operativo, ejecutar comandos, manejar JSON y usar las librerías básicas de automatización profesional.
En el Día 7, haremos un proyecto final real, donde combinarás todo lo aprendido en un script de nivel “sysadmin básico”.
