Cómo agregar argumentos de línea de comandos a un script de Python

Si ha desarrollado una aplicación o un script Python destinado a ejecutarse principalmente en emuladores de terminal o incluso aplicaciones GUI, agregar argumentos de línea de comando puede mejorar su usabilidad, legibilidad del código, estructura de la aplicación y la facilidad de uso general de la aplicación para los usuarios finales. Estos argumentos de la línea de comandos también se denominan “opciones” o “conmutadores” y funcionan de manera similar a los argumentos que normalmente ve en los scripts bash y otros programas basados ​​en C / C ++.

Para agregar argumentos a los scripts de Python, tendrá que usar un módulo incorporado llamado “argparse”. Como sugiere el nombre, analiza los argumentos de la línea de comandos que se utilizan al iniciar una aplicación o un script de Python. Estos argumentos analizados también son verificados por el módulo “argparse” para asegurarse de que sean del “tipo” adecuado. Se generan errores si hay valores no válidos en los argumentos.

El uso del módulo argparse se puede entender mejor a través de ejemplos. A continuación se muestran algunos ejemplos de código que lo ayudarán a comenzar con el módulo argparse.

Ejemplo 1: generar argumento y mensaje de ayuda

Considere el ejemplo de código a continuación:

import argparse

parser = argparse.ArgumentParser(description=‘A test program.’)

args = parser.parse_args()

La primera declaración importa el módulo “argparse”. A continuación, se crea una nueva instancia del objeto “ArgumentParser” y se proporciona una breve descripción del programa como argumento. El objeto ArgumentParser es necesario para convertir los valores de los argumentos de la línea de comandos en tipos de datos entendidos por Python. Esto se hace mediante el método “parse_args” del objeto ArgumentParser, como se muestra en la última declaración.

Suponiendo que ha guardado el ejemplo de código indicado anteriormente en un archivo llamado “test.py”, ejecutar los comandos a continuación le proporcionará mensajes de ayuda relacionados con el programa.

$ ./test.py -h

$ ./test.pyhelp

Debería obtener un resultado similar a este:

usage: test.py [-h]

A test program.

optional arguments:

  -h, –help  show this help message and exit

Tenga en cuenta que no se ha agregado ninguna lógica para manejar argumentos analizados y convertirlos en objetos al ejemplo de código mencionado anteriormente. Por lo tanto, los mensajes de ayuda para argumentos individuales no se muestran en la salida. Una vez que agregue lógica para manejar los valores de los argumentos analizados en su programa, los mensajes de ayuda comenzarán a mostrar la descripción de los argumentos individuales.

Ejemplo 2: manejar un argumento de cadena

Para agregar argumentos aceptables para su secuencia de comandos de Python, debe usar el método “add_argument”. Eche un vistazo al siguiente código:

import argparse

parser = argparse.ArgumentParser(description=‘A test program.’)

parser.add_argument(“print_string”, help=“Prints the supplied argument.”)

args = parser.parse_args()

print(args.print_string)

Se ha agregado una nueva declaración que muestra el uso del método “add_argument”. Cualquier argumento agregado al iniciar el script será tratado como un objeto “print_string” por “ArgumentParser”.

Tenga en cuenta que, de forma predeterminada, el método “add_argument” trata los valores recuperados de los argumentos como cadenas, por lo que no tiene que especificar explícitamente el “tipo” en este caso. También se asigna un valor predeterminado de “Ninguno” a los argumentos agregados, a menos que se anule.

Una vez más, eche un vistazo al mensaje de ayuda:

usage: test.py [-h] [print_string]

A test program.

positional arguments:

  print_string  Prints the supplied argument.

optional arguments:

  -h, –help    show this help message and exit

Una de las líneas en la salida dice “argumentos posicionales”. Dado que no se define ninguna palabra clave para el argumento, actualmente el argumento se trata como un “argumento posicional” donde el orden y la posición del argumento proporcionado tiene un efecto directo en el programa. Los argumentos posicionales también son obligatorios, a menos que cambie manualmente su comportamiento.

Para definir y analizar argumentos opcionales, puede usar “-” (guión doble) y cambiar sus valores predeterminados usando el argumento “predeterminado”.

import argparse

parser = argparse.ArgumentParser(description=‘A test program.’)

parser.add_argument(“–print_string”, help=“Prints the supplied argument.”, default=”A random string.”)

args = parser.parse_args()

print(args.print_string)

Ahora, cuando ejecute el script “test.py” sin ningún argumento, debería obtener “Una cadena aleatoria”. como salida. También puede utilizar opcionalmente la palabra clave “–print_string” para imprimir cualquier cadena de su elección.

$ ./test.py –print_string LinuxHint.com
hazlolinux.com

Tenga en cuenta que puede hacer que un argumento opcional sea obligatorio mediante el uso de un argumento adicional “required= True”.

Por último, también puede definir versiones abreviadas del argumento utilizando “-” (guión único) para reducir la verbosidad.

import argparse

parser = argparse.ArgumentParser(description=‘A test program.’)

parser.add_argument(“-p”, “–print_string”, help=“Prints the supplied argument.”, default=”A random string.”)

args = parser.parse_args()

print(args.print_string)

Ejecutar el siguiente comando debería darle el mismo resultado que el anterior:

$ ./test.py -p LinuxHint.com

Ejemplo 3: Manejar un argumento de número entero

Para manejar argumentos que necesitan valores enteros, debe establecer la palabra clave “type” en “int” para permitir la validación y generar errores en caso de que no se cumpla la condición.

import argparse

parser = argparse.ArgumentParser(description=‘A test program.’)

parser.add_argument(“-p”, “–print_string”, help=“Prints the supplied argument.”, type=int)

args = parser.parse_args()

print(args.print_string)

Intente ejecutar el siguiente comando:

$ ./test.py -p LinuxHint.com

Debería recibir un error como este:

usage: test.py [-h] [-p PRINT_STRING]

test.py: error: argument -p/–print_string: invalid int value: ‘hazlolinux.com’

Proporcionar un valor entero le dará el resultado correcto:

$ ./test.py -p 1000
1000

Ejemplo 4: Manejar alternancia de verdadero y falso

Puede pasar argumentos sin ningún valor para tratarlos como indicadores Verdadero y Falso utilizando el argumento “acción”.

import argparse

parser = argparse.ArgumentParser(description=‘A test program.’)

parser.add_argument(“-p”, “–print_string”, help=“Prints the supplied argument.”, action=“store_true”)

args = parser.parse_args()

print(args.print_string)

Ejecute el siguiente comando para obtener un simple “Verdadero” como resultado:

$ ./test.py -p

Si ejecuta el script sin el argumento “-p”, en su lugar se asignará un valor “Falso”. El valor “store_true” de la palabra clave “action” asigna un valor “True” a la variable “print_string” siempre que se especifica explícitamente el argumento “-p” de lo contrario, se asigna False a la variable.

Ejemplo 5: tratar los valores de los argumentos como una lista

Si desea obtener varios valores a la vez y almacenarlos en la lista, debe proporcionar la palabra clave “nargs” en el siguiente formato:

import argparse

parser = argparse.ArgumentParser(description=‘A test program.’)

parser.add_argument(“-p”, “–print_string”, help=“Prints the supplied argument.”, nargs=‘*’)

args = parser.parse_args()

print(args.print_string)

Ejecute el siguiente comando para probar el código anterior:

$ ./test.py -p “a” “b”

Debería obtener un resultado como este:

[‘a’, ‘b’]

Conclusión

El módulo “argparse” es bastante completo con toneladas de opciones para modificar el comportamiento de las aplicaciones de línea de comandos y analizar los valores proporcionados por el usuario. Estos ejemplos solo tocan el uso básico del módulo “argparse”. Para aplicaciones avanzadas y complejas, es posible que necesite diferentes implementaciones. Visite la  documentación oficial  para obtener una explicación completa del módulo.

Leave a Comment

Your email address will not be published. Required fields are marked *

Hazlo Linux