Si vous êtes impliqué dans le traitement et l'analyse de données à l'aide de Python, vous devrez tôt ou tard aller au-delà du Jupyter Notebook, en convertissant votre code en scripts pouvant être exécutés à l'aide de la ligne de commande. C'est là que le module argparse est utile. Pour les débutants, habitués au Jupyter Notebook, cette étape signifie la nécessité de quitter la zone de confort et de se déplacer dans un nouvel environnement. Le matériel, dont nous publions la traduction aujourd'hui, est rédigé afin de faciliter une telle transition.
Module ArgparseModule Argparse
Le module argparse peut être comparé aux forces de la nature qui ont érigé des pics montagneux dominant les nuages. Grâce à ce module en scripts, il devient possible de travailler avec ce qui, sans son utilisation, serait caché au code de ces scripts.
Il convient de noter que
argparse est le module de bibliothèque Python standard recommandé pour travailler avec des arguments de ligne de commande. Je ne pouvais pas trouver un bon guide d'argparse pour les débutants, j'ai donc décidé d'écrire un tel guide moi-même.
La vie au-delà du cahier Jupyter
Quand j'ai rencontré argparse pour la première fois dans le script Python dont j'avais besoin pour un projet que j'avais fait pendant mon temps libre, je me suis dit: "Quelle est cette mystérieuse construction?" Après cela, j'ai rapidement transféré le code vers le Jupyter Notebook, mais une telle décision s'est avérée irrationnelle.
J'avais besoin de pouvoir simplement exécuter le script et ne pas travailler avec lui en utilisant le bloc-notes Jupyter. Un script autonome qui utiliserait le module argparse serait beaucoup plus facile à utiliser, y travailler serait plus facile que de s'appuyer sur les capacités du Jupyter Notebook. Cependant, j'étais alors pressé et quand j'ai regardé la documentation argparse, je ne pouvais pas immédiatement saisir son essence, donc je n'ai pas utilisé la version originale du script.
Depuis lors, j'ai compris argparse et j'ai vraiment aimé ce module. Maintenant, je le considère comme absolument vital. Cependant, la maîtriser n'est pas si difficile.
Pourquoi avons-nous besoin du module argparse?
Le module argparse vous permet d'analyser les arguments transmis au script lors de son exécution à partir de la ligne de commande et permet d'utiliser ces arguments dans le script. Autrement dit, nous parlons du fait que ce module permet au script de fournir certaines données au moment de son lancement, et le script pourra utiliser ces données lors de l'exécution de son code. Le module argparse est un outil avec lequel vous pouvez établir une communication entre l'auteur du programme et celui qui l'utilise, par exemple entre vous lorsque vous écrivez un script aujourd'hui et vous lorsque vous le lancez demain, en lui passant quelque chose.
Utiliser argparse signifie que, si nécessaire, changez le comportement du script ou, si nécessaire, transférez-lui des données, si elles sont fournies par l'auteur du script, l'utilisateur n'a pas besoin de modifier le code du programme. En conséquence, les scripts gagnent un certain niveau de flexibilité.
Exemple
Supposons que vous souhaitiez écrire un script pour convertir des fichiers vidéo en images normales à l'aide de la
bibliothèque OpenCV . Pour que le script puisse résoudre ce problème, il doit connaître l'endroit où les fichiers vidéo sont stockés et l'endroit où vous devez placer l'image finie. Autrement dit, il a besoin d'informations sur deux dossiers, dont les chemins d'accès, ce qui n'est pas très pratique, peuvent être codés en dur dans le code de script, ou, ce qui est beaucoup mieux, vous pouvez laisser l'utilisateur spécifier le script en les entrant comme arguments de ligne de commande lors de l'exécution du script. Afin d'équiper le script d'une telle opportunité, le module argparse nous est utile. Voici à quoi pourrait ressembler la section du script (appelons ce script
videos.py
), dans laquelle les arguments de la ligne de commande sont analysés:
Ici, au début du fichier, le module argparse est importé. Ensuite, à l'aide de la construction
argparse.ArgumentParser()
, un objet
parser
est créé avec sa description. Ensuite, en utilisant la méthode
parser.add_argument()
, la variable
parser.add_argument()
est
indir
, dans laquelle il est prévu d'écrire le chemin d'accès au dossier avec les fichiers vidéo. En même temps, il est indiqué qu'il a un type de chaîne et des informations de référence à ce sujet sont également définies. Après cela, de la même manière, la variable
outdir
est
outdir
, dans laquelle le chemin d'accès au dossier dans lequel le script devra placer les images créées sur la base des fichiers vidéo sera obtenu. À l'étape suivante, le résultat de l'analyse des arguments de ligne de commande pénètre dans la variable
args
. Ce qui est transmis au script au démarrage sera désormais disponible en tant que propriétés
outdir
et
outdir
de l'objet
args
. Vous pouvez maintenant travailler avec ces valeurs. Dans ce cas, nous imprimons simplement à la console ce qui est passé au script dans l'argument
indir
.
Voici comment exécuter ce script à partir de la ligne de commande:
python videos.py /videos /images
Notez que les lignes
/videos
et
/images
n'ont pas besoin d'être citées. Un script lancé de cette manière affichera la ligne
/videos
sur le terminal, confirmant ainsi la possibilité d'utiliser les arguments qui lui sont passés dans son code. C'est la magie de l'argparse en action.
La magie de l'analyse des arguments de ligne de commandeDétails Argparse
Nous venons de regarder un simple exemple d'argparse. Voyons maintenant quelques détails concernant argparse.
▍ Arguments positionnels
La construction du formulaire
parser.add_argument('indir', type=str, help='Input dir for videos')
videos.py
parser.add_argument('indir', type=str, help='Input dir for videos')
partir du script
videos.py
destinée à créer un argument positionnel. Lors de l'appel d'un script, l'ordre dans lequel ces arguments sont spécifiés est important. Ainsi, le premier argument passé au script devient le premier argument positionnel, le deuxième argument devient le deuxième argument positionnel.
Que se passe-t-il si le script est exécuté sans aucun argument en exécutant la commande
python videos.py
dans le terminal?
Dans ce cas, le message d'erreur suivant s'affiche:
videos.py: error: the following arguments are required: indir, outdir
En conséquence, il s'avère que pour exécuter un script qui prévoit l'utilisation d'arguments positionnels, ces arguments doivent toujours être spécifiés lors de son exécution.
▍ Arguments optionnels
Que se passe-t-il lorsque notre script est exécuté avec la commande
python videos.py --help
?
En réponse, des informations d'aide à ce sujet seront affichées. Ce sont exactement les informations sur les arguments positionnels que nous avons indiquées lors de la description des variables correspondantes:
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
Le script nous a dit beaucoup de choses intéressantes sur ce qu'il attend de l'utilisateur, et l'
help
est un exemple d'argument facultatif. Notez que
--help
(ou
-h
) est le seul argument facultatif standard que nous pouvons utiliser lorsque vous travaillez avec argparse, mais si vous avez besoin d'autres arguments facultatifs, vous pouvez les créer vous-même.
Les arguments facultatifs sont créés de la même manière que les arguments positionnels. La principale différence entre les commandes pour leur création est que lors de la spécification des noms de ces arguments, ces noms commencent par une séquence de caractères
--
, ou, pour les formes courtes d'arguments, par un caractère
-
. Par exemple, un argument facultatif pourrait être créé comme ceci:
parser.add_argument('-m', '--my_optional')
Voici un exemple de création et d'utilisation d'arguments facultatifs. Notez que lors de la description de l'argument facultatif ici, nous avons spécifié son type comme
int
. Autrement dit, il s'agit d'un entier. Dans une situation similaire, vous pouvez utiliser d'autres types de Python.
L'argument décrit comme
--my_optional
est disponible dans le programme en tant que propriété de l'objet
my_optional
nommé
my_optional
.
Les arguments facultatifs peuvent recevoir les valeurs qu'ils auront par défaut. Dans notre cas, si aucune valeur n'est donnée à l'argument
my_example
lorsque le script est appelé, le numéro 2 y sera écrit, qui sera sorti sur la console. Afin de définir la valeur de cet argument lors de l'exécution du script, vous pouvez utiliser la construction suivante:
python my_example.py --my_optional=3
Pour quoi d'autre argparse peut-il être utilisé?
Le module argparse peut être utilisé pour développer des applications Python qui sont prévues pour être empaquetées dans des conteneurs Docker. Ainsi, par exemple, si vous devez lui passer des arguments de ligne de commande lors du démarrage d'une application empaquetée dans un conteneur, vous pouvez le décrire au stade de l'assemblage du conteneur dans le Dockerfile à l'aide de l'instruction
RUN
. Vous pouvez utiliser les instructions
CMD
ou
ENTRYPOINT
pour exécuter des scripts pendant l'
ENTRYPOINT
conteneur. Des détails sur Dockerfiles peuvent être trouvés
ici .
Résumé
Nous avons examiné les méthodes de base de travail avec le module argparse, à l'aide desquelles vous pouvez doter vos scripts de la capacité d'accepter et de traiter des arguments de ligne de commande. Il convient de noter que les fonctionnalités argparse ne s'arrêtent pas là. Par exemple, l'utilisation du paramètre
nargs lors de la description des arguments
vous permet de travailler avec des listes d'arguments et le paramètre
choix vous permet de spécifier des ensembles de valeurs que les arguments peuvent prendre. En fait, maintenant, après avoir maîtrisé les principales fonctionnalités d'argparse, vous pouvez, sans trop de difficulté, étudier ce module plus en profondeur, en utilisant la
documentation correspondante.
Si vous avez l'habitude de travailler avec le bloc-notes Jupyter et que vous souhaitez vous éloigner de cette pratique,
voici les informations sur le travail avec les variables d'environnement.
Voici le matériel de l'
outil repo2docker , qui vous permet de convertir les référentiels Jupyter Notebook en images Docker.
Chers lecteurs! Comment travaillez-vous avec les arguments de ligne de commande dans les scripts Python?
