Opciones de línea de comandos y análisis de argumentos con argparse en Python
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.
Cómo usar argparse en Python para interfaces de línea de comandos Copiar enlace
Paso 1: Importar el módulo Copiar enlace
Importa el módulo en tu script:
import argparse
Esto habilita el análisis de argumentos .py desde la línea de comandos.
Paso 2: Crear un objeto ArgumentParser Copiar enlace
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.
Paso 3: Añadir argumentos y opciones Copiar enlace
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.
Paso 4: Analizar la entrada del usuario Copiar enlace
Procesa los argumentos proporcionados:
args = parser.parse_args()
Esto almacena los valores como atributos del objeto args.
Paso 5: Acceder a los datos procesados Copiar enlace
Ejemplo:
print(f"File to process: {args.filename}")
if args.verbose:
print("Verbose mode enabled")
else:
print("Verbose mode disabled")
Ejemplos de uso del CLI Copiar enlace
Procesar archivo sin modo verbose Copiar enlace
python3 file.py example.txt
Procesar archivo con modo verbose Copiar enlace
python3 file.py example.txt --verbose
Mostrar ayuda Copiar enlace
python3 file.py --help
Ejemplos comunes de uso de argparse Copiar enlace
Ejemplo 1: Añadir valores predeterminados Copiar enlace
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
Ejemplo 2: Uso de choices Copiar enlace
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
Ejemplo 3: Manejar múltiples valores Copiar enlace
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
Ejemplo 4: Argumentos opcionales obligatorios Copiar enlace
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
Funciones avanzadas Copiar enlace
Flags booleanas Copiar enlace
parser.add_argument('--debug', action='store_true', help="Enable debugging mode")
Agrupar argumentos relacionados Copiar enlace
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")
Argumentos mutuamente excluyentes Copiar enlace
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")
Conclusión Copiar enlace
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.