Utilizar argumentos desde la terminal

Ciencia y tecnologíaUtilizar argumentos desde la terminal

Un menú con input sirve para aprender pero obliga a responder preguntas cada vez. Los argumentos permiten expresar una operación completa en una línea y repetirla cuando necesites. En esta lección utilizarás argparse para definir comandos, opciones y ayuda. El ejemplo preparará la interfaz del inventario sin escribir todavía en la base.

Una orden que describe su intención

La instrucción python app.py alta CU001 "Cuaderno azul" 3 contiene varias piezas. Python ejecuta el archivo app.py. alta elige la operación y los valores siguientes proporcionan código, nombre y cantidad. Las comillas agrupan las palabras del nombre como un único argumento. No forman parte del nombre que recibe el programa.

Si olvidas las comillas la terminal puede separar Cuaderno y azul en dos argumentos y el analizador rechazará la orden. Es un problema distinto de la validación del nombre. Una capa interpreta la estructura de la orden y otra decide si sus datos cumplen las reglas del inventario. Mantener esa separación permite mensajes más claros.

Probar un analizador independiente

Guarda el siguiente bloque como practica_argumentos.py dentro de practicas. No lo llames app.py porque todavía es una demostración. El programa imprimirá lo que ha interpretado y no abrirá archivos ni modificará el inventario.

def crear_parser(): parser = argparse.ArgumentParser(description="Práctica de inventario") parser.add_argument("–db", default="inventario.db", help="Ruta de la base") comandos = parser.add_subparsers(dest="comando", required=True) comandos.add_parser("iniciar", help="Preparar una base") alta = comandos.add_parser("alta", help="Registrar un artículo") alta.add_argument("codigo") alta.add_argument("nombre") alta.add_argument("cantidad") listar = comandos.add_parser("listar", help="Consultar artículos") listar.add_argument("–buscar", default="") return parser

if __name__ == "__main__": argumentos = crear_parser().parse_args() print(argumentos) «`

Ejecuta python practica_argumentos.py –help para ver la ayuda general. También puedes pedir ayuda de un comando con python practica_argumentos.py alta –help. Es una forma de descubrir qué espera la herramienta sin memorizar toda su documentación. Las descripciones que escribes en el código aparecen junto a las opciones.

Colocar las opciones en el nivel correcto

La opción –db pertenece al analizador principal y en esta interfaz se escribe antes del comando. Por ejemplo: python practica_argumentos.py –db prueba.db listar. La opción –buscar pertenece a listar y se escribe después: python practica_argumentos.py listar –buscar cuaderno. No todas las herramientas aceptan cualquier orden y tus instrucciones deben reflejar el que has implementado.

La cantidad se mantiene como texto para que crear_articulo aplique la misma regla que utiliza la importación CSV. Podríamos pedir a argparse que convierta a int pero seguiríamos necesitando verificar límites y coherencia. Centralizar la validación evita que la terminal admita escrituras que el archivo rechaza o viceversa.

Separar análisis y ejecución

crear_parser solo define cómo leer la orden. parse_args obtiene los argumentos de la terminal. Después una función main elegirá la operación y llamará a los módulos adecuados. La aplicación final reunirá estas piezas pero no pondremos consultas SQL dentro de la definición del analizador. Cada responsabilidad debe seguir siendo reconocible.

Puedes probar el analizador proporcionando una lista explícita a parse_args. Por ejemplo, parse_args(["alta", "CU001", "Cuaderno", "3"]). Esa técnica evita depender de la terminal en una prueba. La lista ya contiene argumentos separados, por lo que no necesitas incluir comillas alrededor de Cuaderno. Las comillas solo ayudan a la terminal a construir esa separación.

Comunicar éxito y error al sistema

Un programa de terminal puede devolver un código de salida. Cero indica éxito y un valor distinto indica un problema. Esto permite que otra herramienta compruebe el resultado sin interpretar frases. Nuestra aplicación devolverá uno para errores de operación previstos. argparse utiliza su propio comportamiento para errores de sintaxis y para la ayuda.

Al final utilizaremos raise SystemExit(main()). main devolverá un número y SystemExit lo entregará al sistema. Los errores esperados se mostrarán en la salida de errores mediante sys.stderr. Los resultados ordinarios irán a la salida normal. No necesitas redirigirlas todavía pero conviene que la herramienta siga esa distinción desde el principio.

Diseñar comandos pequeños

La aplicación final tendrá iniciar, alta, listar, importar y exportar. Cada comando realiza una operación concreta. No añadiremos un comando ambiguo que a veces cree una base y otras la vacíe. La inicialización comunicará la ruta utilizada y las consultas exigirán que el archivo ya exista.

Una exportación creará un archivo nuevo y fallará si el destino existe. Esa decisión protege tus salidas durante la práctica. Si quieres generar otra exportación utiliza un nombre diferente. Una futura opción de sobrescritura necesitaría ser explícita y estar acompañada de pruebas, no aparecer como una consecuencia oculta de volver a ejecutar la misma orden.

Errores habituales

Pedir argumentos obligatorios y después ignorarlos para solicitar lo mismo mediante input crea una interfaz confusa. Tampoco debes esconder un fallo devolviendo siempre cero. Si una importación no se completó el sistema debe poder distinguirla de una correcta. Los mensajes y los códigos de salida expresan aspectos complementarios del resultado.

Otro error es construir comandos del sistema concatenando texto recibido. Este proyecto no necesita ejecutar órdenes externas. argparse interpreta argumentos para tu propio programa y después llamarás directamente a funciones Python. Mantén ese alcance: no introduzcas shell ni evaluación de cadenas para resolver operaciones que ya están disponibles como funciones.

Lo que deberías recordar

  • Los argumentos describen una operación repetible.
  • Cada opción pertenece a un nivel del analizador.
  • La validación del modelo sigue siendo necesaria.
  • El código de salida comunica éxito o fallo.

Ejercicio práctico

Ejecuta las ayudas general y de alta. Después interpreta un alta con un nombre de dos palabras usando comillas. Repite sin ellas y observa el error del analizador. En el cuaderno distingue este fallo estructural de un nombre vacío que el modelo rechazaría más adelante.

Prueba –db antes del comando y –buscar después de listar. Anota dos órdenes completas que puedas reutilizar. Añade al analizador un comando llamado exportar con un argumento destino pero conserva la demostración sin escrituras. Comprueba que el valor aparece en el objeto de argumentos.

Finalmente llama a parse_args con una lista desde otra función y verifica el valor de codigo. Explica por qué esa prueba no necesita escribir nada en la terminal. Guarda la práctica como referencia, ya que el capítulo diecinueve proporcionará el archivo app.py completo con las operaciones reales.

Referencia de consulta: Módulo argparse en la documentación oficial de Python.

Siguiente: Preparar copias y comprobar la recuperación.

Volver al índice de Programar con Python.

Últimos posts

DEJA UNA RESPUESTA

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí

 

Artículos más vistos

Horóscopo diario
Menú diario