Python de aprendizaje: m贸dulo argparse

Si est谩 involucrado en el procesamiento y an谩lisis de datos usando Python, entonces, tarde o temprano, tendr谩 que ir m谩s all谩 de Jupyter Notebook, convirtiendo su c贸digo en scripts que se pueden ejecutar usando la l铆nea de comando. Aqu铆 es donde el m贸dulo argparse es 煤til. Para los principiantes, acostumbrados al cuaderno Jupyter, este paso significa la necesidad de abandonar la zona de confort y mudarse a un nuevo entorno. El material, cuya traducci贸n publicamos hoy, est谩 escrito para facilitar tal transici贸n.


M贸dulo Argparse

M贸dulo Argparse


El m贸dulo argparse se puede comparar con las fuerzas de la naturaleza que han erigido picos de monta帽as que se elevan por encima de las nubes. Gracias a este m贸dulo en scripts, es posible trabajar con algo que, sin su uso, estar铆a oculto del c贸digo de estos scripts.

Cabe se帽alar que argparse es el m贸dulo de biblioteca Python est谩ndar recomendado para trabajar con argumentos de l铆nea de comandos. No pude encontrar una buena gu铆a de discusi贸n para principiantes, as铆 que decid铆 escribirla.

La vida m谩s all谩 del cuaderno Jupyter


Cuando encontr茅 por primera vez argparse en el script de Python que necesitaba para un proyecto que hice en mi tiempo libre, pens茅: "驴Qu茅 es esta misteriosa construcci贸n?" Despu茅s de eso, transfer铆 r谩pidamente el c贸digo al Cuaderno Jupyter, pero tal movimiento result贸 ser irracional.

Necesitaba poder ejecutar el script y no trabajar con 茅l usando el Jupyter Notebook. Un script independiente que usara el m贸dulo argparse ser铆a mucho m谩s f谩cil de usar, trabajar en 茅l ser铆a m谩s f谩cil que confiar en las capacidades de Jupyter Notebook. Sin embargo, ten铆a prisa y, cuando mir茅 la documentaci贸n del argumento, no pude comprender de inmediato su esencia, por lo que no utilic茅 la versi贸n original del gui贸n.

Desde entonces, descubr铆 argparse y realmente me gust贸 este m贸dulo. Ahora lo considero absolutamente vital. Sin embargo, dominarlo no es tan dif铆cil.

驴Por qu茅 necesitamos el m贸dulo argparse?


El m贸dulo argparse le permite analizar los argumentos pasados 鈥嬧媋l script cuando se ejecuta desde la l铆nea de comandos, y hace posible usar estos argumentos en el script. Es decir, estamos hablando del hecho de que este m贸dulo permite que el script proporcione algunos datos en el momento de su lanzamiento, y el script podr谩 usar estos datos durante la ejecuci贸n de su c贸digo. El m贸dulo argparse es un medio por el cual puede establecer comunicaci贸n entre el autor del programa y el que lo utiliza, por ejemplo, entre usted cuando escribe un gui贸n hoy y usted cuando lo lanza ma帽ana, pas谩ndole algo.

El uso de argparse significa que, si es necesario, cambia el comportamiento del script o, si es necesario, le transfiere algunos datos, si el autor del script lo proporciona, el usuario no necesita editar el c贸digo del programa. Como resultado, los scripts obtienen un cierto nivel de flexibilidad.

Ejemplo


Suponga que desea escribir un script para convertir archivos de video a im谩genes normales utilizando la biblioteca OpenCV . Para que el script resuelva este problema, necesita saber el lugar donde se almacenan los archivos de video y el lugar donde necesita colocar la imagen terminada. Es decir, necesita informaci贸n sobre dos carpetas, las rutas a las cuales, lo que no es muy conveniente, puede codificarse en el c贸digo del script, o, lo que es mucho mejor, puede permitir que el usuario especifique el script ingres谩ndolo como argumentos de l铆nea de comandos cuando ejecuta el script. Para equipar el script con tal oportunidad, el m贸dulo argparse es 煤til para nosotros. As铆 es como se ver铆a la secci贸n del script (llamemos a este script videos.py ), en el que se videos.py los argumentos de la l铆nea de comandos:

 # videos.py import argparse parser = argparse.ArgumentParser(description='Videos to images') parser.add_argument('indir', type=str, help='Input dir for videos') parser.add_argument('outdir', type=str, help='Output dir for image') args = parser.parse_args() print(args.indir) 

Aqu铆, al comienzo del archivo, se importa el m贸dulo argparse. Luego, utilizando la construcci贸n argparse.ArgumentParser() , se crea un objeto parser con su descripci贸n. A continuaci贸n, usando el m茅todo parser.add_argument() , se indir variable parser.add_argument() , en la que se planea escribir la ruta a la carpeta con archivos de video. Al mismo tiempo, se indica que tiene un tipo de cadena y tambi茅n se establece informaci贸n de referencia al respecto. Despu茅s de eso, de la misma manera, se outdir variable outdir , en la que se outdir la ruta a la carpeta en la que el script tendr谩 que colocar las im谩genes creadas en base a los archivos de video. En el siguiente paso, el resultado de analizar los argumentos de la l铆nea de comando se introduce en la variable args . Lo que se pasa al script al inicio ahora estar谩 disponible como las propiedades outdir y outdir del objeto args . Ahora puedes trabajar con estos valores. En este caso, simplemente imprimimos en la consola lo que se pasa al script en el argumento indir .

Aqu铆 se explica c贸mo ejecutar este script desde la l铆nea de comandos:

 python videos.py /videos /images 

Tenga en cuenta que las l铆neas /videos e /images no necesitan ser citadas. Una secuencia de comandos iniciada de esta manera generar谩 la l铆nea /videos en el terminal, confirmando as铆 la posibilidad de utilizar los argumentos que se le pasan en su c贸digo. Esta es la magia de argparse en acci贸n.


La magia de analizar argumentos de l铆nea de comando

Detalles de Argparse


Acabamos de ver un ejemplo de argparse simple. Ahora analicemos algunos detalles sobre argparse.

鈻 Argumentos posicionales


Una construcci贸n del formulario parser.add_argument('indir', type=str, help='Input dir for videos') del script videos.py como objetivo crear un argumento posicional. Cuando se llama a un script, el orden en que se especifican dichos argumentos es importante. Entonces, el primer argumento pasado al script se convierte en el primer argumento posicional, el segundo argumento se convierte en el segundo argumento posicional.

驴Qu茅 sucede si el script se ejecuta sin ning煤n argumento ejecutando el comando python videos.py en la terminal?

En este caso, se mostrar谩 el siguiente mensaje de error:

 videos.py: error: the following arguments are required: indir, outdir 

Como resultado, resulta que para ejecutar un script que permita el uso de argumentos posicionales, dichos argumentos siempre deben especificarse cuando se ejecuta.

鈻 Argumentos opcionales


驴Qu茅 sucede cuando nuestro script se ejecuta con el comando python videos.py --help ?

En respuesta, se mostrar谩 informaci贸n de ayuda al respecto. Esta es exactamente la informaci贸n sobre los argumentos posicionales que indicamos al describir las variables correspondientes:

 usage: videos.py [-h] indir outdir Videos to images positional arguments: indir       Input dir for videos outdir      Output dir for image optional arguments: -h, --help  show this help message and exit 

El script nos dijo muchas cosas interesantes sobre lo que espera del usuario, y la help es un ejemplo de un argumento opcional. Tenga en cuenta que --help (o -h ) es el 煤nico argumento opcional est谩ndar que podemos usar cuando trabajamos con argparse, pero si necesita otros argumentos opcionales, puede crearlos usted mismo.

Los argumentos opcionales se crean de la misma manera que los argumentos posicionales. La principal diferencia entre los comandos para crearlos es que al especificar los nombres de tales argumentos, estos nombres comienzan con una secuencia de caracteres, o, para formas cortas de argumentos, con un car谩cter. Por ejemplo, se podr铆a crear un argumento opcional como este:

 parser.add_argument('-m', '--my_optional') 

Aqu铆 hay un ejemplo de c贸mo crear y usar argumentos opcionales. Tenga en cuenta que al describir el argumento opcional aqu铆, especificamos su tipo como int . Es decir, es un n煤mero entero. En una situaci贸n similar, puede usar otros tipos de Python.

 # my_example.py import argparse parser = argparse.ArgumentParser(description='My example explanation') parser.add_argument(   '--my_optional',   type=int,   default=2,   help='provide an integer (default: 2)' ) my_namespace = parser.parse_args() print(my_namespace.my_optional) 

El argumento descrito como --my_optional est谩 disponible en el programa como una propiedad del objeto my_optional llamado my_optional .

A los argumentos opcionales se les pueden asignar los valores que tendr谩n por defecto. En nuestro caso, si no se da ning煤n valor al argumento my_example cuando se llama al script, se escribir谩 el n煤mero 2, que se enviar谩 a la consola. Para establecer el valor de este argumento durante la ejecuci贸n del script, puede usar la siguiente construcci贸n:

 python my_example.py  --my_optional=3 

驴Para qu茅 m谩s se puede usar argparse?


El m贸dulo argparse se puede usar para desarrollar aplicaciones Python que se planean empaquetar en contenedores Docker. Entonces, por ejemplo, si necesita pasarle argumentos de l铆nea de comando al iniciar una aplicaci贸n empaquetada en un contenedor, puede describirlo en la etapa de ensamblaje del contenedor en el Dockerfile usando la instrucci贸n RUN . Puede usar las instrucciones CMD o ENTRYPOINT para ejecutar scripts durante la ENTRYPOINT contenedor. Los detalles sobre Dockerfiles se pueden encontrar aqu铆 .

Resumen


Examinamos las formas b谩sicas de trabajar con el m贸dulo argparse, mediante el cual puede equipar sus scripts con la capacidad de aceptar y procesar argumentos de l铆nea de comandos. Cabe se帽alar que las caracter铆sticas argparse no terminan all铆. Por ejemplo, usar el par谩metro nargs al describir argumentos le permite trabajar con listas de argumentos, y el par谩metro de opciones le permite especificar conjuntos de valores que los argumentos pueden tomar. De hecho, ahora, habiendo dominado las caracter铆sticas principales de argparse, usted, sin mucha dificultad, puede estudiar este m贸dulo m谩s profundamente, utilizando la documentaci贸n para ello.

Si est谩 acostumbrado a trabajar con Jupyter Notebook y desea alejarse de esta pr谩ctica, aqu铆 tiene : materiales sobre c贸mo trabajar con variables de entorno. Aqu铆 est谩 el material de la herramienta repo2docker , que le permite convertir los repositorios de Jupyter Notebook en im谩genes de Docker.

Estimados lectores! 驴C贸mo trabajas con argumentos de l铆nea de comandos en scripts de Python?

Source: https://habr.com/ru/post/440654/


All Articles