Módulo 2 · Lección 1 de 28
Qué es una aplicación de terminal
Por qué los programas de línea de comandos siguen siendo la herramienta profesional, cómo se estructura una orden y qué dos estilos existen.
Los programas que has escrito hasta ahora se arrancan con python3 algo.py, imprimen cosas y preguntan por teclado. Eso ya es una aplicación de terminal. Lo que cambia en este módulo es la ambición: dejan de ser ejercicios para convertirse en herramientas que se usan a diario, con la misma pinta y las mismas costumbres que git, pip o ls.
Es tentador pensar que un programa sin ventanas está a medio hacer. No lo está. La línea de comandos es donde vive casi toda la herramienta profesional, y no por nostalgia: hay razones concretas, y conviene entenderlas antes de escribir la primera línea del módulo.
Por qué la terminal gana#
Un programa de terminal recibe datos, hace algo y escribe el resultado. Esa simpleza le da cuatro ventajas que una ventana con botones no tiene:
- Se automatiza. Lo que se escribe a mano se puede escribir en un fichero y lanzarlo a las tres de la mañana, todos los días, sin nadie delante. Nadie ha conseguido programar una tarea que consista en "pinchar en este botón".
- Se encadena. La salida de un programa puede ser la entrada del siguiente. Tres herramientas pequeñas, bien hechas, resuelven un problema que ninguna resolvía sola.
- Funciona a distancia. Por SSH, dentro de un contenedor o en un servidor sin pantalla, la terminal es lo único que hay. Una interfaz gráfica en una máquina sin monitor es un adorno.
- No necesita ratón ni memoria visual. Una orden se puede copiar, pegar en un correo, guardar en la documentación y volver a ejecutar tal cual seis meses después. Un recorrido de clics por cinco menús no se puede pegar en ningún sitio.
A eso se suma un detalle práctico: son rápidas de escribir. El programa del que hablamos en este módulo se hace en doscientas líneas. La misma funcionalidad con ventanas, botones y ratón cuesta bastante más, y lo verás en el módulo de Tkinter.
Órdenes que ya has usado#
Sin haberlo pensado, llevas dos módulos usando aplicaciones de terminal escritas por otros:
python3 --versionPython 3.14.7ls
pip install requests
git commit -m "Primer arreglo"Las cuatro son programas normales, escritos por alguien, que reciben datos al arrancar. pip en concreto está escrito en Python, igual que lo que vas a escribir tú. Al final del módulo, tu herramienta se instalará y se ejecutará por su nombre, como esas.
La anatomía de una orden#
Toda orden de terminal tiene la misma estructura. Mira esta:
pip install --upgrade requestsSe lee en tres piezas:
| Pieza | Qué es | En el ejemplo |
|---|---|---|
| El comando | El programa que se ejecuta. Siempre va primero | pip |
| Los argumentos | Los datos con los que trabaja. Su orden importa | install, requests |
| Las opciones | Modifican el comportamiento. Empiezan por guion y suelen poder ir en cualquier sitio | --upgrade |
Las opciones vienen en dos formatos, y casi todas las herramientas serias ofrecen los dos para lo mismo:
| Formato | Aspecto | Para qué |
|---|---|---|
| Corto | Un guion y una letra: -v, -h, -l | Escribir rápido a mano |
| Largo | Dos guiones y una palabra: --verbose, --help | Legible en documentación y en scripts |
Algunas opciones son un simple interruptor (--upgrade: está o no está) y otras llevan un valor detrás (--output informe.csv). Y las cortas de tipo interruptor se pueden apelotonar: ls -l -a -h es lo mismo que ls -lah.
Los dos estilos#
Aquí está la decisión de diseño más importante del módulo. Un programa de terminal puede conversar contigo o puede hacer una cosa y morir.
Interactivo: conversa contigo#
Pregunta los datos que le faltan, normalmente con un menú, y no termina hasta que se lo pides.
"""Estilo interactivo: pregunta y espera respuesta."""
nombre = input("¿Cómo te llamas? ")
veces = int(input("¿Cuántas veces te saludo? "))
for _ in range(veces):
print(f"Hola, {nombre}.")python3 saluda_interactivo.py¿Cómo te llamas? Erwin
¿Cuántas veces te saludo? 3
Hola, Erwin.
Hola, Erwin.
Hola, Erwin.Es el estilo del gestor de tareas con el que cerraste el módulo 1. Se aprende solo, sin leer documentación, porque el programa te va guiando.
De un solo disparo: recibe los datos al arrancar#
Todo lo que necesita se lo dices en la misma línea. Hace su trabajo, escribe el resultado y termina.
"""Estilo de un solo disparo: recibe los datos al arrancar y termina."""
import sys
nombre = sys.argv[1]
veces = int(sys.argv[2])
for _ in range(veces):
print(f"Hola, {nombre}.")python3 saluda.py Erwin 3Hola, Erwin.
Hola, Erwin.
Hola, Erwin.Esa lista sys.argv que aparece ahí es la puerta de entrada a los argumentos, y tiene lección propia en la siguiente. Quédate solo con la idea: el programa no ha preguntado nada, ha recibido Erwin y 3 de la línea de comandos.
La diferencia que de verdad importa#
No es la comodidad. Es que solo el segundo estilo se puede automatizar:
python3 saluda.py Erwin 3 > saludos.txtEso no imprime nada: los tres saludos han acabado dentro de saludos.txt. Y esto otro le pasa la salida a un segundo programa, wc -l, que cuenta líneas:
python3 saluda.py Erwin 3 | wc -l 3Ese | manda la salida del programa a otro programa, y ese > la guarda en un fichero. Con el programa interactivo no funcionaría: se quedaría esperando a que alguien escriba el nombre, y ese alguien no existe. Las tuberías y la redirección tienen su propia lección más adelante en el módulo.
| Interactivo | Un solo disparo | |
|---|---|---|
| Se aprende | Solo, con el menú delante | Leyendo --help |
| Se automatiza | No | Sí |
| Se encadena con otros programas | No | Sí |
| Cómodo para muchas operaciones seguidas | Sí | No, hay que repetir la orden |
| Bueno para | Personas que usan el programa de vez en cuando | Scripts, tareas repetidas y usuarios habituales |
Qué vas a construir#
El resto del módulo va de convertir esos programas de juguete en herramientas presentables. Por partes:
- Controlar la pantalla: imprimir sin salto de línea, reescribir una línea, limpiar, adaptarte al ancho de la ventana.
- Pedir datos sin que el programa se rompa cuando alguien escribe
treinta y cuatrodonde esperabas un número. - Menús que se navegan de verdad, con submenús y sin cadenas interminables de
elif. - Color, tablas con bordes y barras de progreso, todo con la biblioteca estándar y sin instalar nada.
- Y después argumentos, códigos de salida, configuración, registro de actividad y empaquetado, hasta que tu programa se instale y se ejecute por su nombre.