Cómo usar argparse para analizar los parámetros de scripts de python

Cómo usar argparse para analizar los parámetros de scripts de python

Objetivo

Aprenda a usar el módulo Argparse para analizar fácilmente los parámetros de scripts de Python

Requisitos

  • Conocimientos básicos de Python y conceptos orientados a objetos

Dificultad

FÁCIL

Convenciones

  • # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz
    directamente como usuario raíz o mediante el uso de sudo dominio
  • ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Introducción

En un artículo anterior, hemos visto cómo analizar los argumentos de la línea de comandos utilizando Getopts en el contexto de los scripts bash (puede encontrar el artículo aquí). Ahora veremos cómo lograr la misma tarea, de una manera más poderosa, al escribir un guión de Python.

Inicializar el analizador

Para lograr nuestro objetivo, vamos a usar un módulo Python llamado argparse. Nos permitirá especificar nuestros parámetros de línea de comando y generará automáticamente el mensaje de ayuda de script en función de ellos. Entonces, comencemos, llamaremos a nuestro script "Impresscript.py ":

#!/usr/bin/env python import argparse if __name__ == '__main__': # Inicializar el analizador Parser = Argparse.ArgumentParser (description = "script simple para demostrar el uso de argparse")
Copiar

Lo primero que debe hacer es, obviamente, importar el argparse módulo. Después de eso procedemos a inicializar el analizador. El descripción La palabra clave, pasada al constructor de analizador es opcional, pero nos permite agregar una breve descripción del script cuando se muestra el mensaje de ayuda.

Hay otras palabras clave que podemos usar para personalizar aún más el comportamiento del analizador: por ejemplo, proporcionar el epílogo Palabra clave podemos proporcionar un texto que se mostrará después del mensaje de ayuda principal, o utilizando prog Podemos especificar el nombre del programa que se mostrará en el mismo contexto (por defecto SYS.se usa argv [0]).



Agregar un parámetro posicional

Ahora es el momento de agregar nuestro primer parámetro posicional al script. En este caso, agregaremos el parámetro "printMe", esa es la cadena que se imprimirá con nuestro script de prueba. Logramos esto usando el add_argument () Método del objeto analizado que inicializamos anteriormente:

pasador.add_argument ('printMe', ayuda = "La cadena a imprimir")

El primer argumento que proporcionamos al método es el nombre del parámetro, y el segundo, opcional, es ayuda. Usando esta palabra clave, podemos especificar la descripción del parámetro que se mostrará en el mensaje de ayuda generado por Argparse.

Es importante notar que, por defecto, los parámetros se considerarán como cadenas: para especificar otro tipo de datos, debemos usar el tipo palabra clave. Por ejemplo, si quisiéramos que nuestro argumento se convirtiera a un entero, lo habríamos especificado de esta manera:

pasador.add_argument ('printMe', type = int)

Una vez que agregamos nuestro parámetro, debemos invocar el parse_args () Método del objeto analizador. Este método devolverá una instancia del argparse.Espacio de nombres Clase: los parámetros analizados se almacenarán como atributos de esta instancia. Finalmente podemos agregar una línea para imprimir la variable. En este punto, el guión debe verse de esta manera:

#!/usr/bin/env python import argparse if __name__ == '__main__': # Inicializar el analizador Parser = Argparse.ArgumentParser (descripción = "script simple para demostrar el uso de argparse") # Agregar el analizador de parámetros posicionales.add_argument ('printMe', ayuda = "La cadena a imprimir") # Parse los argumentos argumentos = parser.parse_args () # Finalmente imprima la impresión de cadena pasada (argumentos.imprimir)
Copiar

Ejecutámoslo:

ps ./Printerscript.py "Hola mundo!" Hola Mundo! 

La cadena que pasamos ha sido impresa ha esperado. Pero, ¿y si no lo proporcionamos?? Se habría demostrado el mensaje de ayuda, describiendo el uso correcto del script:

ps ./Printerscript.Uso de PY: Printerscript.Py [-h] PrintMe Printerscript.PY: Error: muy pocos argumentos 


Agregar un parámetro opcional

Los parámetros opcionales no son obligatorios para el uso del script, pero se utilizan para modificar su comportamiento. Argparse los reconoce cuando ve que los guiones se proporcionan en la descripción, por ejemplo: por ejemplo:

pasador.add_argument ('-r', '--Repeat', Help = "Número de veces para imprimir la cadena", type = int, default = 1)
Copiar

El nombre del parámetro tiene un prefijo con guiones (podemos especificar la versión de parámetro corto y largo). En este caso agregamos el parámetro opcional --repetir que especifica cuántas veces se debe imprimir la cadena. También usamos el por defecto palabra clave. Esto es realmente importante, porque a través de él, podemos especificar el valor que el atributo asumirá si el parámetro no se proporciona explícitamente al llamar al script.

En este punto, para verificar que el parámetro funcione como se esperaba, todo lo que tenemos que hacer es modificar nuestro script para repetir la impresión de la cadena para el número especificado de veces, por lo tanto, encerramos el imprimir() funcionar en un poco en bucle:

para i en rango (0, argumentos.repetir): imprimir (argumentos.imprimir) 
Copiar

Vamos a intentarlo:

ps ./Printerscript.py - -repeat = 3 "Hola mundo!" Hola Mundo! Hola Mundo! Hola Mundo! 

Todo salió como se esperaba. Además, el mensaje de ayuda también se ha actualizado, y ahora incluye una descripción del nuevo parámetro opcional:

./Printerscript.PY -Help Uso: Printerscript.py [-h] [-r repita] PrintMe Script simple para demostrar Argparse Uso Argumentos posicionales: PrintMe La cadena a imprimir Argumentos opcionales: -h, --help Mostrar este mensaje de ayuda y salir de la repetición, -Repita el número de repetición de veces para imprimir la cadena 

Como se dijo anteriormente, cuando argparse ve que un parámetro tiene un prefijo con guiones, supone que es opcional. Para modificar este comportamiento y "declararlo" como obligatorio, podemos usar el requerido Palabra clave Al agregar el parámetro, en el formulario: requerido = verdadero.

La palabra clave "Dest"

Normalmente, el valor proporcionado para un parámetro se almacenará como un atributo que lleva el nombre del primer argumento dado al add_argument () Método en el caso de los parámetros posicionales, o la primera opción de cadena larga (con los guiones eliminados: la cadena -reseat se convertirá en el atributo 'repetir') en el caso de parámetros opcionales. En el último caso, si una opción de cadena larga no está disponible, la corta se usa. El desestimado La palabra clave nos permite especificar un nombre de atributo personalizado en lugar de confiar en este comportamiento.



La palabra clave de "acción"

Al usar el add_argument () Método Podemos especificar el comportamiento que se utilizará para las opciones analizadas utilizando otra palabra clave: acción. La acción predeterminada es asignar el valor aprobado al atributo correspondiente. En el caso de nuestro pequeño script, por ejemplo, el valor proporcionado para el --repetir parámetro, se asignará al atributo 'repetir' del argparse.Espacio de nombres clase una vez que se analizan los argumentos. Este comportamiento, sin embargo, también se puede modificar. Describamos las otras opciones principales en breve:

store_true y store_false

Al especificar esta acción, básicamente estamos diciendo que el parámetro no requiere un argumento: Verdadero se asignará como el valor al atributo correspondiente si se proporciona la opción, o FALSO de lo contrario. store_true y store_false proporcionará respectivamente un valor predeterminado de Verdadero y FALSO.

store_const

Esto es similar a la opción anterior, pero al usarla como un valor para el acción palabra clave, en lugar de un booleano, un constante El valor se asignará al atributo si se usa el parámetro. Este valor se especifica a sí mismo utilizando el estúpido palabra clave:

pasador.add_argument ("-option random", action = "store_const", const = YourValue)
adjuntar

Si adjuntar se usa como valor del acción Palabra clave, una lista será creada y referenciada por el atributo de parámetro correspondiente: el valor proporcionado se agregará a ella. Esto es útil en caso de que el parámetro se proporcione más de una vez:

pasador.ADD_ARGUMENT ('-OPCIÓN ALATIVA', Action = "Append")
append_const

Al igual que cuando se usa adjuntar, Un valor se agregará a la lista referenciada por el atributo de parámetro. La diferencia es que en este caso, el usuario no proporciona el valor, sino que se declara al agregar el parámetro, nuevamente, a través del estúpido palabra clave:

pasador.add_argument ('-randomOption', action = "append_const", const = "El valor para agregar")
Copiar

Parámetros opcionales mutuamente excluyentes

En cierta situación, es posible que necesitemos hacer algunas opciones mutuamente excluyentes. El argparse El módulo nos permite lograr esta tarea de una manera variable. Básicamente, lo que vamos a hacer es crear un grupo separado de opciones utilizando el add_mutually_exclusive_group () Método del objeto analizador, y agregue nuestros argumentos a él. Por ejemplo:

parser = argparse.ArgumentParser (); # Crear nuestro grupo de argumentos mutuamente excluyentes mutuamente_exclusive = parser.add_mutually_exclusive_group () mutuamente_exclusive.add_argument ("-foo", ayuda = "foo excluye la barra") mutuamente_exclusive.add_argument ("-bar", ayuda = "bar excluye foo")
Copiar

Una cosa a notar es que ser parte de un mutuamente_exclusive_group Los argumentos deben ser opcionales, por lo tanto, argumentos posicionales, o argumentos que definió como requerido (requerido = verdadero) no están permitidos en él.

En este punto deberías tener una idea de cómo argparse obras. Sin embargo, solo rascamos la superficie de lo que este módulo tiene para ofrecer: para una descripción completa de todas sus funcionalidades, continúe y lea la documentación, no se arrepentirá. Bonita secuencia de comandos!

Tutoriales de Linux relacionados:

  • Bash Script: Uso de banderas con ejemplos de argumentos
  • Cosas para instalar en Ubuntu 20.04
  • Comandos de Linux: los 20 comandos más importantes que necesitas ..
  • Comandos básicos de Linux
  • Cómo construir una aplicación Tkinter utilizando un objeto orientado ..
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Mastering Bash Script Loops
  • Cómo imprimir el árbol de directorio usando Linux
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?