Comment utiliser ArgParse pour analyser les paramètres de scripts Python

Comment utiliser ArgParse pour analyser les paramètres de scripts Python

Objectif

Apprenez à utiliser le module ArgParse pour analyser facilement les paramètres de scripts Python

Exigences

  • Connaissance de base des concepts de python et d'objet

Difficulté

FACILE

Conventions

  • # - nécessite que les commandes Linux soient exécutées avec des privilèges racine
    directement en tant qu'utilisateur racine ou en utilisant Sudo commande
  • $ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier

Introduction

Dans un article précédent, nous avons vu comment analyser les arguments de la ligne de commande en utilisant Getopts dans le contexte des scripts bash (vous pouvez trouver l'article ici). Maintenant, nous verrons comment accomplir la même tâche, d'une manière plus puissante, lors de l'écriture d'un script Python.

Initialiser l'analyseur

Pour atteindre notre objectif, nous allons utiliser un module Python appelé argparse. Il nous permettra de spécifier nos paramètres de ligne de commande et générera automatiquement le message d'aide du script basé sur eux. Alors commençons, nous appellerons notre script «Printerscript.py ":

#!/ usr / bin / env python Import argparse if __name__ == '__main__': # initialize l'analyseur parser = argparse.ArgumentPaSer (Description = "Script simple pour démontrer l'utilisation argparse")
Copie

La première chose à faire est, évidemment, d'importer le argparse module. Après cela, nous procédons à l'initialisation de l'analyseur. Le description Le mot-clé, transmis au constructeur d'analyseur est facultatif, mais nous permet d'ajouter une brève description du script lorsque le message d'aide s'affiche.

Il existe d'autres mots clés que nous pouvons utiliser pour personnaliser davantage le comportement de l'analyseur: par exemple épilogue mot-clé Nous pouvons fournir un texte à afficher après le message d'aide principale, ou en utilisant programme Nous pouvons spécifier le nom du programme à afficher dans le même contexte (par défaut SYS.argv [0] est utilisé).



Ajout d'un paramètre de position

Il est maintenant temps d'ajouter notre premier paramètre de position au script. Dans ce cas, nous ajouterons le paramètre «printme», c'est-à-dire la chaîne qui sera imprimée par notre script de test. Nous accomplissons cela en utilisant le add_argument () Méthode de l'objet d'analyse que nous avons initialisé ci-dessus:

analyseur.add_argument ('printme', help = "la chaîne à imprimer")

Le premier argument que nous avons fourni à la méthode est le nom du paramètre, et le second, facultatif, est aider. En utilisant ce mot-clé, nous pouvons spécifier la description du paramètre qui sera affiché dans le message d'aide généré par Argparse.

Il est important de noter que par défaut, les paramètres seront considérés comme des chaînes: pour spécifier un autre type de données, nous devons utiliser le taper mot-clé. Par exemple, si nous voulions que notre argument soit converti en un entier, nous l'aurions spécifié de cette façon:

analyseur.add_argument ('printme', type = int)

Une fois que nous avons ajouté notre paramètre, nous devons invoquer le parse_args () Méthode de l'objet d'analyse. Cette méthode renverra une instance du argparse.Espace de noms Classe: Les paramètres analysés seront stockés comme des attributs de cette instance. Enfin, nous pouvons ajouter une ligne pour imprimer la variable. À ce stade, le script devrait ressembler à cette façon:

#!/ usr / bin / env python Import argparse if __name__ == '__main__': # initialize l'analyseur parser = argparse.ArgumentPaSer (Description = "Script simple pour démontrer l'utilisation argparse") # Ajouter l'analyseur de paramètre de position.add_argument ('printme', help = "la chaîne à imprimer") # analyse les arguments arguments = analyser.parse_args () # imprimez enfin l'impression de la chaîne passée (arguments.Imprime moi)
Copie

Exécutons-le:

$ ./ imprimerscript.Py "Hello World!" Bonjour le monde! 

La chaîne que nous avons transmise a été imprimée. Mais et si nous ne l'avons pas fourni? Le message d'aide aurait été montré, décrivant l'utilisation correcte du script:

$ ./ imprimerscript.Utilisation du PY: imprimeurs.py [-h] printme imprimerscript.PY: Erreur: trop peu d'arguments 


Ajout d'un paramètre facultatif

Les paramètres facultatifs ne sont pas obligatoires pour l'utilisation du script, mais ils sont utilisés pour modifier son comportement. Argparse les reconnaît lorsqu'il voit que les traits sont fournis dans la description, donc par exemple:

analyseur.add_argument ('-r', '--repeat', help = "nombre de fois pour imprimer la chaîne", type = int, default = 1)
Copie

Le nom du paramètre est préfixé avec des traits de traits (nous pouvons spécifier à la fois la version courte et le paramètre long). Dans ce cas, nous avons ajouté le paramètre facultatif --répéter qui spécifie combien de fois la chaîne doit être imprimée. Nous avons également utilisé le défaut mot-clé. Ceci est vraiment important, car à travers lui, nous pouvons spécifier la valeur que l'attribut supposera si le paramètre n'est pas explicitement fourni lors de l'appel du script.

À ce stade, pour vérifier que le paramètre fonctionne comme prévu, tout ce que nous avons à faire est de modifier notre script afin de répéter l'impression de la chaîne pour le nombre de fois spécifié, nous enfermons donc le imprimer() fonction dans un peu pour boucle:

pour i à portée (0, arguments.répéter): imprimer (arguments.Imprime moi) 
Copie

Essayons:

$ ./ imprimerscript.py --repeat = 3 "Hello World!" Bonjour le monde! Bonjour le monde! Bonjour le monde! 

Tout est allé comme prévu. De plus, le message d'aide a également été mis à jour et comprend désormais une description du nouveau paramètre facultatif:

./ imprimerscript.py - utilisation d'assistance: imprimeurscript.py [-h] [-r répéter] printme Script simple pour démontrer les arguments de position de l'utilisation argparse: printme la chaîne à imprimer des arguments facultatifs: -h, - help afficher ce message d'aide et exit -r repeat, --repeat répéter le numéro des fois pour imprimer la chaîne 

Comme dit ci-dessus, quand argparse voit qu'un paramètre est préfixé avec des traits. Pour modifier ce comportement et le «déclarer» comme obligatoire, nous pouvons utiliser le requis Mot-clé lors de l'ajout du paramètre, sous la forme: requis = vrai.

Le mot-clé «dest»

Normalement, la valeur fournie pour un paramètre sera stockée comme un attribut nommé d'après le premier argument donné au add_argument () Méthode dans le cas des paramètres de position, ou la première option de chaîne longue (avec les tirets supprimés: la chaîne -repeat deviendra l'attribut «répéter») dans le cas des paramètres facultatifs. Dans ce dernier cas, si une longue option de chaîne n'est pas disponible, la courte est utilisée. Le destruction Le mot-clé nous permet de spécifier un nom d'attribut personnalisé au lieu de compter sur ce comportement.



Le mot-clé «action»

Lorsque vous utilisez le add_argument () Méthode Nous pouvons spécifier le comportement à utiliser pour les options analysées en utilisant un autre mot-clé: action. L'action par défaut consiste à attribuer la valeur passée à l'attribut correspondant. Dans le cas de notre minuscule script, par exemple, la valeur fournie pour le --répéter paramètre, sera affecté à l'attribut «répéter» du argparse.Espace de noms classe une fois que les arguments sont analysés. Ce comportement, cependant, peut également être modifié. Décrivons les autres options principales en bref:

store_true et store_false

En spécifiant cette action, nous disons essentiellement que le paramètre ne nécessite pas d'argument: Vrai sera attribué comme valeur à l'attribut correspondant si l'option est fournie, ou FAUX sinon. store_true et store_false fournira respectivement une valeur par défaut de Vrai et FAUX.

store_const

Ceci est similaire à l'option ci-dessus, mais en l'utilisant comme valeur pour le action mot-clé, au lieu d'un booléen, un constant la valeur sera attribuée à l'attribut si le paramètre est utilisé. Cette valeur est elle-même spécifiée en utilisant le const mot-clé:

analyseur.add_argument ("- aléatoire-option", action = "store_const", const = yourValue)
ajouter

Si ajouter est utilisé comme valeur du action mot-clé, une liste sera créée et référencée par l'attribut de paramètre correspondant: la valeur fournie sera annexée. Ceci est utile au cas où le paramètre serait fourni plus d'une fois:

analyseur.add_argument ('- random-option', action = "append")
APPEND_CONST

Comme lors de l'utilisation ajouter, Une valeur sera ajoutée à la liste référencée par l'attribut de paramètre. La différence est que dans ce cas, la valeur n'est pas fournie par l'utilisateur, mais déclarée lors de l'ajout du paramètre, encore une fois, via le const mot-clé:

analyseur.add_argument ('--randoMoption', action = "append_const", const = "la valeur à ajouter")
Copie

Paramètres facultatifs mutuellement exclusifs

Dans une certaine situation, nous devrons peut-être faire des options mutuellement exclusives. Le argparse Le module nous permet d'accomplir cette tâche d'une manière variée facile. Fondamentalement, ce que nous allons faire est de créer un groupe distinct d'options en utilisant le add_muttuellement_exclusive_group () Méthode de l'objet analyseur et ajoutez-y nos arguments. Par exemple:

Parser = Argparse.ArgumentParser (); # Créez notre groupe d'arguments mutuellement exclusifs mutuellement_exclusive = Parser.add_muttuellement_exclusive_group () mutuellement_exclusive.add_argument ("- foo", help = "foo exclut bar") mutuellement_exclusive.add_argument ("- bar", help = "bar exclut foo")
Copie

Une chose à remarquer est que faire partie d'un mutuellement_exclusive_group Les arguments doivent être facultatifs, donc les arguments de position ou les arguments que vous avez définis comme requis (requis = vrai) n'y sont pas autorisés.

À ce stade, vous devriez avoir une idée de la façon dont argparse travaux. Cependant, nous avons seulement rayé la surface de ce que ce module a à offrir: pour une description complète de toutes ses fonctionnalités, veuillez aller de l'avant et lire la documentation, vous ne le regretterez pas. Belle script!

Tutoriels Linux connexes:

  • Script bash: utilisation des drapeaux avec des exemples d'arguments
  • Choses à installer sur Ubuntu 20.04
  • Commandes Linux: les 20 meilleures commandes les plus importantes que vous devez…
  • Commandes Linux de base
  • Comment créer une application Tkinter à l'aide d'un objet orienté…
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Masterring Bash Script Loops
  • Comment imprimer l'arbre du répertoire à l'aide de Linux
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?