Las interfaces de línea de comandos (CLIs) son uno de los medios más rápidos y eficaces para interactuar con software. Permiten ejecutar comandos directamente, lo que conduce a una ejecución más rápida y a funciones más avanzadas. Los desarrolladores suelen crear CLIs en Python para múltiples aplicaciones, utilidades y scripts de automatización, permitiendo procesar dinámicamente la entrada del usuario. Aquí es donde entra en juego el módulo argparse de Python.
El módulo argparse simplifica el procesamiento de argumentos de la línea de comandos y permite a los desarrolladores crear utilidades interactivas y fáciles de usar. Al ser parte de la biblioteca estándar, permite definir, procesar y validar entradas sin necesidad de lógica compleja.
En este artículo veremos los conceptos más importantes, ejemplos prácticos y funciones avanzadas del módulo argparse, para que puedas comenzar a construir herramientas de línea de comandos robustas de inmediato.
Importa el módulo en tu script:
import argparse
Esto habilita el análisis de argumentos .py desde la línea de comandos.
La clase ArgumentParser es la clase más básica de la API del módulo argparse. Para utilizarla, crea una instancia:
parser = argparse.ArgumentParser(description="A Hostman tutorial on Python argparse.")
Aquí:
description explica lo que hace el programa y se muestra cuando el usuario ejecuta --help.
Define los parámetros que acepta tu programa con add_argument():
parser.add_argument('filename', type=str, help="Name of the file to process")
parser.add_argument('--verbose', action='store_true', help="Enable verbose mode")
Explicación:
filename es obligatorio.
--verbose es opcional y activa el modo detallado.
Procesa los argumentos proporcionados:
args = parser.parse_args()
Esto almacena los valores como atributos del objeto args.
Ejemplo:
print(f"File to process: {args.filename}")
if args.verbose:
print("Verbose mode enabled")
else:
print("Verbose mode disabled")
python3 file.py example.txt
python3 file.py example.txt --verbose
python3 file.py --help
Algunos argumentos opcionales necesitan valores predeterminados. En este ejemplo, --timeout tiene un valor por defecto de 30 segundos:
import argparse
parser = argparse.ArgumentParser(description="Demonstrating default argument values.")
parser.add_argument('--timeout', type=int, default=30, help="Timeout in seconds (default: 30)")
args = parser.parse_args()
print(f"Timeout value: {args.timeout} seconds")
Explicación
Importación del módulo
Creación del ArgumentParser
--timeout con type=int y valor por defecto
Procesamiento con parse_args()
Caso 1: valor predeterminado
python file.py
Caso 2: valor personalizado
python file.py --timeout 60
El parámetro choices limita un argumento a un conjunto de valores válidos:
parser.add_argument('--mode', choices=['basic', 'advanced'], help="Choose the mode of operation")
Caso 1: válido
python3 file.py --mode basic
Caso 2: sin valor
python3 file.py
Caso 3: valor inválido
python3 file.py --mode intermediate
El parámetro nargs='+' permite aceptar varios valores:
parser.add_argument('--numbers', nargs='+', type=int, help="List of numbers to process")
Caso 1: múltiples números
python3 file.py --numbers 10 20 30
Caso 2: un número
python3 file.py --numbers 5
Caso 3: sin input
python3 file.py
Caso 4: valor no válido
python3 file.py --numbers 10 abc 20
Aunque los argumentos con -- son opcionales por defecto, puedes hacerlos obligatorios usando required=True:
parser.add_argument('--config', required=True, help="Path to the configuration file")
Caso 1: válido
python3 file.py --config settings.json
Caso 2: sin el argumento obligatorio
python3 file.py
parser.add_argument('--debug', action='store_true', help="Enable debugging mode")
group = parser.add_argument_group('File Operations')
group.add_argument('--input', type=str, help="Input file")
group.add_argument('--output', type=str, help="Output file")
group = parser.add_mutually_exclusive_group()
group.add_argument('--json', action='store_true', help="Output in JSON format")
group.add_argument('--xml', action='store_true', help="Output in XML format")
El módulo argparse facilita la creación de CLIs fiables para gestionar argumentos de línea de comandos en Python. Desde opciones básicas hasta características avanzadas como choices y nargs, los desarrolladores pueden construir herramientas robustas y fáciles de usar. Dar nombres claros a los argumentos y escribir buenas descripciones ayuda a mantener tus scripts legibles y fáciles de mantener.