Cómo crear una ayuda «profesional» desde la línea de comandos y cómo obtener los argumentos (parámetros) pasados por línea de comandos a una aplicación/script Python. Mostramos el método usando la librería argparse y cómo obtener los argumentos sin librerías, con argv.
- Trabajar con argumentos/parámetros en Python con librería argparse.
- Ejemplo de uso del procedimiento que define los argumentos en una aplicación Pythton real.
- Argumentos en Python con argv.
Trabajar con argumentos/parámetros en Python con librería argparse
Para la gestión de los parámetros usaremos el paquete argparse, que suele venir preinstalado en Python. Por lo tanto, en nuestro script Python, añadiremos el import necesario:
1 |
import argparse |
Un ejemplo de un procedimiento Python que define unos parámetros (argumentos) para nuestro programa, podría ser:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# Mostrar y preparar los argumentos que admite el programa por la línea de comandos def MostrarArgumentos(): # Iniciamos el programa, obteniendo los argumentos pasados por la línea de comandos # Conformamos los argumentos que admitirá el programa por la línea de comandos parser = argparse.ArgumentParser() parser.add_argument("-ur", "--urlraiz", type=str, required=True, help="URL raíz a analizar (sin htt://)") parser.add_argument("-uc", "--urlcompleta", type=str, required=True, help="URL completa a analizar (con http o https://)") parser.add_argument("-p", "--puerto", type=int, required=False, help="Puerto de conexión") parser.add_argument("-m", "--modulo", type=str, required=True, help="Nombre del módulo") parser.add_argument("-v", "--version", action="store_true", required=False, help="Muestra por pantalla la versión de OpenSSL") parser.add_argument("-e", "--ComprobarPorEncabezado", action="store_true", required=False, help="Para obtener web activa usa un encabezado, necesita los parámetros -EncabezadoNombre -EncabezadoValor") parser.add_argument("-c", "--ComprobarPorCodigoRespuesta", action="store_true", required=False, help="Para obtener web activa usa un encabezado, necesita los parámetros -EncabezadoNombre -EncabezadoValor") parser.add_argument("-en", "--EncabezadoNombre", type=str, required=False, help="Nombre del encabezado para obtener su valor y comprobar si es igual. Por ejemplo 'X-Redirect-By'. El valor del encabezado se indica en el parámetro -ev") parser.add_argument("-ev", "--EncabezadoValor", type=str, required=False, help="Valor del encabezado indicado en parámetro -en para comprobar si es igual, si lo es la web se marca como activa") parser.add_argument("-me", "--MostrarEncabezados", action="store_true", required=False, help="Devuelve todos los encabezados del sitio web y sus valores") return parser.parse_args() |
Como podemos observar en el ejemplo anterior, el procedimiento MostrarArgumentos define los argumentos que admitirá el programa, el tipo de argumento y una descripción que se mostrará si se usa el parámetro -help. El procedimiento devolverá los parámetros definidos, por lo que quedará listo para su uso en el programa, como veremos a continuación.
La librería argparse es muy completa y se puede hacer cualquier combinación con los argumentos, incluso definir los que son obligatorios y hacerlo por grupos.
Ejemplo de uso del procedimiento que define los argumentos en una aplicación Pythton real
En el siguiente enlace mostramos un ejemplo completo del uso del procedimiento MostrarArgumentos, en una aplicación Python real:
Un ejemplo de uso del programa anterior, pasándole unos parámetros/argumentos de ejemplo:
1 |
python.exe EstadoSitioWeb.py -ur proyectoa.com -uc https://proyectoa.com/index.php -m "Web_OK_ProyectoA" -e -en "Server" -ev "HTTPd" |
Y si añadimos el parámetro -h, nos devolverá todos los parámetros que admite nuestra aplicación y su correspondiente descripción:
1 |
python.exe EstadoSitioWeb.py -h |
Argumentos en Python con argv
En caso de no querer usar una librería para trabajar con argumentos, podremos programar nuestra propia captura. Por ejemplo, en el siguiente script Python capturamos los argumentos y los recorremos (iteramos), mostrando todos los argumentos pasados por parámetro al ejecutable:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import sys # Comprobamos si se han pasado argumentos por línea de comandos # Teniendo en cuenta que el primer argumento argv[0] es el propio nombre del ejecutable Python argumentos = sys.argv numArg = len(argumentos) if (numArg > 0): print(f"Has pasado {numArg} argumentos por la línea de comandos") print("Los argumentos que has pasado son:") i = 0 for argumento in argumentos: i = i + 1 print(f"Argumento {i} -> {argumento}") else: print("No has pasado argumentos por la línea de comandos") |
Guardaremos el código Python anterior en un fichero con el nombre argumentos.py. Para ejecutarlo y probarlo, desde la línea de comandos, ejecutaremos:
1 |
python.exe argumentos.py |
Si no le pasamos argumentos, como en el caso anterior, devolverá un argumento, que es el nombre del propio fichero (argumento 0):
Los argumentos que has pasado son:
Argumento 1 -> d:/Mis documentos/ProyectoA/Python/Argumentos/argumentos.py
Si le pasamos dos argumentos:
1 |
argumentos.py Argumento1 Argumento2 |
Devolverá:
Has pasado 3 argumentos por la línea de comandos
Los argumentos que has pasado son:
Argumento 1 -> d:/Mis documentos/ProyectoA/Python/Argumentos/argumentos.py
Argumento 2 -> Argumento1
Argumento 3 -> Argumento2
Recordad que indica que se pasan 3 argumentos porque aunque no se especifique, siempre habrá 1 argumento, el nombre del fichero.
Y, para pasarle argumentos con espacios, usaremos las comillas dobles. Por ejemplo:
1 |
argumentos.py "Argumento1 con espacios" |
Devolverá:
Has pasado 2 argumentos por la línea de comandos
Los argumentos que has pasado son:
Argumento 1 -> d:/Mis documentos/ProyectoA/Python/Argumentos/argumentos.py
Argumento 2 -> Argumento1 con espacios