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 ArgparseMó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 al 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:
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 comandoDetalles 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.
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?
