Python de Cero a Pro - Cap. 14 - Interfaces CLI & TUI
Síguenos con el tutorial
Section titled “Síguenos con el tutorial”Python de Cero a Pro - Cap. 14 - Interfaces CLI y TUI
Volver a Página Principal
Ver Código en GitLab
Python de Cero a Pro - Cap. 14: Interfaces CLI & TUI 💻
Section titled “Python de Cero a Pro - Cap. 14: Interfaces CLI & TUI 💻”¡Bienvenidos al Capítulo 14! En esta entrega exploraremos cómo llevar nuestros scripts de Python al siguiente nivel, transformándolos en herramientas profesionales que interactúan directamente con el usuario a través de la terminal. Aprenderemos la diferencia entre CLI y TUI, y cómo construir interfaces robustas que funcionen en cualquier sistema operativo. 🚀
¿Qué son CLI y TUI?
Section titled “¿Qué son CLI y TUI?”Antes de programar, es vital entender las herramientas que estamos construyendo:
1. CLI (Command Line Interface)
Section titled “1. CLI (Command Line Interface)”La Interfaz de Línea de Comandos es un método de interacción donde el usuario escribe comandos en una terminal y recibe una respuesta textual. Su enfoque es la eficiencia, la automatización y el uso de argumentos.
- Ejemplos Reales:
git,docker,pip,ls,grep. - Filosofía: “Haz una sola cosa y hazla bien”. Se ejecutan de forma lineal y suelen terminar tras procesar la tarea.
2. TUI (Text User Interface)
Section titled “2. TUI (Text User Interface)”La Interfaz de Usuario de Texto es una evolución visual dentro de la terminal. Utiliza caracteres de texto para dibujar “ventanas”, botones, menús y barras de progreso, permitiendo una navegación más intuitiva mediante el teclado o incluso el mouse.
- Ejemplos Reales:
htop,vim,nano,ranger,lazy-git. - Filosofía: “Dashboard en la terminal”. Mantienen una sesión abierta y dinámica mientras el usuario interactúa.
Desarrollo Multiplataforma (Linux, Windows, macos)
Section titled “Desarrollo Multiplataforma (Linux, Windows, macos)”Python es un lenguaje excelente para esto porque es multiplataforma por naturaleza. Sin embargo, hay consideraciones clave:
- Terminales: Mientras que Linux y macOS usan terminales basadas en Unix (Bash/Zsh), Windows históricamente usó CMD, pero ahora cuenta con Windows Terminal y PowerShell, que soportan secuencias de escape ANSI (colores y estilos).
- Codificación: Asegúrate siempre de usar
UTF-8para evitar problemas con tildes y caracteres especiales en diferentes sistemas. - Librerías: Algunas librerías viejas (como
curses) son nativas de Unix y requieren parches para Windows, pero librerías modernas comoRichoTextualfuncionan de maravilla en los tres sistemas.
Herramientas Fundamentales en Python
Section titled “Herramientas Fundamentales en Python”Para CLI (Argumentos y Comandos)
Section titled “Para CLI (Argumentos y Comandos)”argparse: Integrada en la librería estándar de Python. Potente pero algo verbosa.Click: La librería favorita de la industria. Permite crear comandos y subcomandos mediante decoradores de forma muy elegante.Typer: Basada en Click, pero utiliza “Type Hints” modernos para generar la documentación automáticamente.
Para TUI (Diseño y Estética)
Section titled “Para TUI (Diseño y Estética)”Rich: La navaja suiza para dar color, tablas, paneles y barras de progreso a la terminal.Textual: Un framework moderno (construido sobre Rich) para crear aplicaciones interactivas complejas con un sistema similar a CSS.Inquirer/Questionary: Ideales para crear menús interactivos de selección y entradas de texto amigables.
Ejemplo de Código: CLI Profesional con Click
Section titled “Ejemplo de Código: CLI Profesional con Click”Primero, instala la librería: pip install click
import click
@click.group()def cli(): """Mi Herramienta de Gestión Profesional 🛠️""" pass
@cli.command()@click.option('--nombre', prompt='Tu nombre', help='Nombre del usuario a saludar.')@click.option('--repetir', default=1, help='Número de veces a saludar.')def saludar(nombre, repetir): """Saluda al usuario de forma personalizada.""" for _ in range(repetir): click.echo(f"Hola, {nombre}! Bienvenido al curso de Python.")
if __name__ == '__main__': cli()Entendiendo el código CLI (Click) 🔍
Section titled “Entendiendo el código CLI (Click) 🔍”@click.group(): Crea un “comando maestro”. Esto permite que tu script tenga múltiples funciones (subcomandos), similar a cómogittienecommit,push, etc.@cli.command(): Registra la función inferior como un subcomando del grupo.@click.option(): Define una bandera o bandera (flag).prompt: Si el usuario no escribe el valor en la terminal, el programa se detendrá para preguntárselo amigablemente.help: Es la documentación automática. Si ejecutaspython script.py saludar --help, verás este texto explicativo.
click.echo(): Es preferible sobreprint()porque garantiza que los colores y caracteres especiales se vean igual en Windows, Linux y macOS.
Ejemplo de Código: TUI Estética con Rich
Section titled “Ejemplo de Código: TUI Estética con Rich”Primero, instala la librería: pip install rich
from rich.console import Consolefrom rich.table import Tablefrom rich.panel import Panel
console = Console()
def mostrar_dashboard(): console.print(Panel("[bold blue]Dashboard de Sistema[/bold blue]", expand=False))
tabla = Table(title="Usuarios Activos") tabla.add_column("ID", justify="right", style="cyan", no_wrap=True) tabla.add_column("Nombre", style="magenta") tabla.add_column("Estado", justify="right", style="green")
tabla.add_row("1", "Ramiro Pastrano", "Conectado") tabla.add_row("2", "Invitado", "Ausente") tabla.add_row("3", "Dev_User", "Ocupado")
console.print(tabla)
if __name__ == "__main__": mostrar_dashboard()Entendiendo el código TUI (Rich) 🎨
Section titled “Entendiendo el código TUI (Rich) 🎨”Console(): Es el motor de renderizado. Detecta qué tipo de terminal estás usando y activa automáticamente el soporte para emojis y colores ANSI.Panel(): Una herramienta estética que encierra el texto en un borde cuadrado. El atributoexpand=Falsehace que el panel solo sea tan grande como el texto que contiene.Table(): Gestiona la alineación de datos. Es difícil alinear columnas manualmente en la terminal, peroRichlo hace por ti calculando el espacio necesario.style="color": Define el color de la columna usando nombres estándar (cyan,magenta,green).justify="right": Alinea el texto a la derecha, ideal para números o IDs.
console.print(): A diferencia del print común, este método sabe cómo convertir objetos complejos (tablas, paneles, progresos) en texto visualmente atractivo.
Ejercicios de Práctica 📝
Section titled “Ejercicios de Práctica 📝”- El Consultor de Archivos (CLI): Crea un script que reciba la ruta de una carpeta como argumento (
--path) y liste todos los archivos.pyque hay dentro, mostrando su tamaño. UsaClick. - Gestor de Tareas Interactivo (TUI): Utilizando
RichoQuestionary, crea un pequeño menú que permita:- Ver tareas pendientes en una tabla estilizada.
- “Marcar como completada” seleccionando de una lista.
- Conversor de Unidades Multiplataforma: Diseña una herramienta que convierta de Celsius a Fahrenheit, donde la entrada se pueda pasar por argumento de comando O mediante un prompt interactivo si no se proporciona el argumento.
Conclusión 🎉
Section titled “Conclusión 🎉”Dominar CLI y TUI te permite crear herramientas que otros desarrolladores y usuarios avanzados amarán. Ya sea automatizando servidores Linux o creando herramientas internas para Windows, Python te da el poder de construir interfaces rápidas, ligeras y visualmente impresionantes sin necesidad de un entorno gráfico pesado.
En el próximo capítulo, profundizaremos en Textual para crear aplicaciones completas que parecen software de escritorio dentro de tu terminal. ¡No te lo pierdas! 💪🐍
Referencias Complementarias
Section titled “Referencias Complementarias”- Click Documentation: El estándar para CLIs en Python.
- Rich Documentation: Cómo hacer que tu terminal se vea increíble.
- Astro Docs: Para saber más sobre cómo se renderiza esta documentación.
- QuePasaLinux YouTube: Tutoriales prácticos sobre terminal y automatización.