Skip to content

Python de Cero a Pro - Cap. 14 - Interfaces CLI & TUI

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. 🚀


Antes de programar, es vital entender las herramientas que estamos construyendo:

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.

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:

  1. 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).
  2. Codificación: Asegúrate siempre de usar UTF-8 para evitar problemas con tildes y caracteres especiales en diferentes sistemas.
  3. Librerías: Algunas librerías viejas (como curses) son nativas de Unix y requieren parches para Windows, pero librerías modernas como Rich o Textual funcionan de maravilla en los tres sistemas.

  • 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.
  • 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()
  • @click.group(): Crea un “comando maestro”. Esto permite que tu script tenga múltiples funciones (subcomandos), similar a cómo git tiene commit, 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 ejecutas python script.py saludar --help, verás este texto explicativo.
  • click.echo(): Es preferible sobre print() 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 Console
from rich.table import Table
from 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()
  • 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 atributo expand=False hace 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, pero Rich lo 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.

  1. El Consultor de Archivos (CLI): Crea un script que reciba la ruta de una carpeta como argumento (--path) y liste todos los archivos .py que hay dentro, mostrando su tamaño. Usa Click.
  2. Gestor de Tareas Interactivo (TUI): Utilizando Rich o Questionary, crea un pequeño menú que permita:
    • Ver tareas pendientes en una tabla estilizada.
    • “Marcar como completada” seleccionando de una lista.
  3. 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.

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! 💪🐍