FRFAM.COM >> Famille >> Technologie &Innovation >> Informatique

Comment créer vos propres programmes de ligne de commande en Python avec Click

Click est un package Python pour écrire des interfaces de ligne de commande. Il produit une belle documentation pour vous et vous permet de créer des interfaces de ligne de commande en aussi peu qu'une ligne de code. En bref :c'est génial et cela peut vous aider à faire passer vos programmes au niveau supérieur.

Voici comment vous pouvez l'utiliser pour animer vos projets Python.

Écrire des programmes en ligne de commande sans clic

Il est possible d'écrire des programmes en ligne de commande sans utiliser Click, mais cela nécessite plus d'efforts et beaucoup plus de code. Vous devez analyser les arguments de ligne de commande, effectuer une validation, développer une logique pour gérer différents arguments et créer un menu d'aide personnalisé. Vous souhaitez ajouter une nouvelle option ? Vous modifierez alors votre fonction d'aide.

Il n'y a rien de mal à écrire votre propre code, et c'est un excellent moyen d'apprendre Python, mais Click vous permet de suivre les principes "Ne vous répétez pas" (DRY). Sans Click, vous écrirez du code fragile et nécessitant beaucoup de maintenance chaque fois que des modifications se produisent.

Voici une simple interface de ligne de commande codée sans clic :

importer sys 
importer au hasard
def do_work() :
""" Fonction pour gérer l'utilisation de la ligne de commande"""
args =sys.argv
args =args[1:] # Le premier élément de args est le nom du fichier
si len(args) ==0 :
print('Vous n'avez passé aucune commande !')
autre:
pour un in args :
si un =='--help' :
print('Programme de base en ligne de commande')
imprimer('Options :')
print(' --help -> afficher ce menu d'aide de base.')
print(' --monty -> afficher une citation Monty Python.')
print(' --veg -> afficher un légume au hasard')
elif a =='--monty' :
print('Qu'est-ce que c'est, alors ? "Romanes eunt domus" ? Des gens appelés Romanes, ils vont, la maison ?')
elif a =='--veg' :
print(random.choice(['Carotte', 'Pomme de terre', 'Navet']))
autre:
print('Argument non reconnu.')
si __nom__ =='__main__' :
do_work()
Comment créer vos propres programmes de ligne de commande en Python avec Click

Ces 27 lignes de Python fonctionnent bien mais sont très fragiles. Toute modification que vous apporterez à votre programme nécessitera de nombreux autres codes de support pour être modifié. Si vous modifiez le nom d'un argument, vous devrez mettre à jour les informations d'aide. Ce code peut facilement devenir incontrôlable.

Voici la même logique avec Click :

clic d'importation 
importer au hasard
@click.command()
@click.option('--monty', default=False, help='Afficher une citation Monty Python.')
@click.option('--veg', default=False, help='Afficher un légume au hasard.')
def do_work(monty, veg):
""" L'exemple de clic de base suivra vos commandes"""
si mois:
print('Qu'est-ce que c'est, alors ? "Romanes eunt domus" ? Des gens appelés Romanes, ils vont, la maison ?')
si végétarien :
print(random.choice(['Carotte', 'Pomme de terre', 'Navet']))
si __nom__ =='__main__' :
do_work()

Cet exemple Click implémente la même logique dans 16 lignes de code. Les arguments sont analysés pour vous et l'écran d'aide est généré :

Comment créer vos propres programmes de ligne de commande en Python avec Click

Cette comparaison de base montre combien de temps et d'efforts vous pouvez économiser en utilisant des programmes tels que Click. Bien que l'interface de ligne de commande puisse sembler la même pour l'utilisateur final, le code sous-jacent est plus simple et vous économiserez beaucoup de temps de codage. Toute modification ou mise à jour que vous écrivez à l'avenir verra également des augmentations significatives du temps de développement.

Premiers pas avec Click pour Python

Avant d'utiliser Click, vous souhaiterez peut-être configurer un environnement virtuel. Cela empêchera vos packages Python d'entrer en conflit avec votre système Python ou d'autres projets sur lesquels vous travaillez peut-être. Vous pouvez également essayer Python dans votre navigateur si vous voulez jouer avec Python et Click.

Enfin, assurez-vous que vous utilisez Python version 3. Il est possible d'utiliser Click avec Python version 2, mais ces exemples sont en Python 3. En savoir plus sur les différences entre Python 2 et Python 3.

Une fois prêt, installez Click depuis la ligne de commande en utilisant PIP (comment installer PIP pour Python) :

clic d'installation pip 

Écrire votre programme de premier clic

Dans un éditeur de texte, commencez par importer Click :

clic d'importation 

Une fois importé, créez une méthode et un principal point d'accès. Notre guide Python OOP les couvre plus en détail, mais ils fournissent un endroit pour stocker votre code et un moyen pour Python de commencer à l'exécuter :

clic d'importation 
importer au hasard
def veg() :
""" La méthode de base renverra un légume aléatoire"""
print(random.choice(['Carotte', 'Pomme de terre', 'Navet', 'Panais']))
si __nom__ =='__main__' :
légumes()

Ce script très simple affichera un légume aléatoire. Votre code peut sembler différent, mais cet exemple simple est parfait à combiner avec Click.

Enregistrez-le sous click_example.py , puis exécutez-le dans la ligne de commande (après avoir navigué jusqu'à son emplacement) :

python click_example.py 

Vous devriez voir un nom de légume aléatoire. Améliorons les choses en ajoutant Click. Modifiez votre code pour inclure les décorateurs Click et un for boucle :

@click.command() 
@click.option('--total', default=3, help='Nombre de légumes à sortir.')
def veg (total):
""" La méthode de base renverra un légume aléatoire"""
pour le nombre dans la plage (total):
print(random.choice(['Carotte', 'Pomme de terre', 'Navet', 'Panais']))
si __nom__ =='__main__' :
légumes()

En courant, vous verrez un légume aléatoire affiché trois fois.

Décomposons ces changements. Le @click.command() le décorateur configure Cliquez pour travailler avec la fonction suivant immédiatement le décorateur. Dans ce cas, c'est le veg() une fonction. Vous en aurez besoin pour chaque méthode que vous souhaitez utiliser avec Click.

L'option @click. Le décorateur configure le clic pour accepter les paramètres de la ligne de commande, qu'il transmettra à votre méthode. Trois arguments sont utilisés ici :

  1. --total : Ceci est le nom de la ligne de commande pour le total argument.
  2. par défaut : Si vous ne spécifiez pas l'argument total lors de l'utilisation de votre script, Click utilisera la valeur par défaut.
  3. aide : Une courte phrase expliquant comment utiliser votre programme.

Voyons Click en action. Depuis la ligne de commande, exécutez votre script, mais transmettez le total argument comme celui-ci :

python click_example.py --total 10 

En définissant --total 10 depuis la ligne de commande, votre script imprimera dix légumes aléatoires.

Si vous passez dans le --help flag, vous verrez une belle page d'aide, ainsi que les options que vous pouvez utiliser :

python click_example.py --help 
Comment créer vos propres programmes de ligne de commande en Python avec Click

Ajout de commandes supplémentaires

Il est possible d'utiliser plusieurs décorateurs Click sur la même fonction. Ajoutez une autre option de clic au légume fonction :

@click.option('--gravy', default=False, help='Ajouter "with gravy" aux légumes.') 

N'oubliez pas de passer ceci dans la méthode :

def légumes(total, sauce): 

Maintenant, lorsque vous exécutez votre fichier, vous pouvez passer la sauce drapeau :

python click_example.py --gravy y 

L'écran d'aide a également changé :

Comment créer vos propres programmes de ligne de commande en Python avec Click

Voici l'intégralité du code (avec quelques refactorisations mineures pour plus de propreté) :

clic d'importation 
importer au hasard
@click.command()
@click.option('--gravy', default=False, help='Ajouter "with gravy" aux légumes.')
@click.option('--total', default=3, help='Nombre de légumes à sortir.')
def veg (total, sauce):
""" La méthode de base renverra un légume aléatoire"""
pour le nombre dans la plage (total):
choix =random.choice(['Carotte', 'Pomme de terre', 'Navet', 'Panais'])
si sauce :
print(f'{choix} avec sauce')
autre:
impression (choix)
si __nom__ =='__main__' :
légumes()

Encore plus d'options de clic

Une fois que vous connaissez les bases, vous pouvez commencer à examiner des options de clic plus complexes. Dans cet exemple, vous apprendrez à transmettre plusieurs valeurs à un seul argument, que Click convertira en un tuple. Vous pouvez en savoir plus sur les tuples dans notre guide du dictionnaire Python.

Créez un nouveau fichier appelé click_example_2.py . Voici le code de démarrage dont vous avez besoin :

clic d'importation 
importer au hasard
@click.command()
def add() :
""" La méthode de base ajoutera deux nombres ensemble."""
passe
si __nom__ =='__main__' :
ajouter()

Il n'y a rien de nouveau ici. La section précédente explique ce code en détail. Ajouter un @click.option appelé numéros :

@click.option('--numbers', nargs=2, type=int, help='Ajouter deux nombres ensemble.') 

Le seul nouveau code ici est le nargs=2 , et le type=int options. Cela indique Cliquez pour accepter deux valeurs pour les nombres option, et qu'ils doivent tous deux être de type entiers. Vous pouvez le remplacer par n'importe quel nombre ou type de données (valide) de votre choix.

Enfin, modifiez l'ajout méthode pour accepter les nombres argument, et effectuez un traitement avec eux :

def add(nombres) :
""" La méthode de base ajoutera deux nombres ensemble."""
résultat =nombres[0] + nombres[1]
print(f'{nombres[0]} + {nombres[1]} ={résultat}')

Chaque valeur que vous transmettez est accessible via les chiffres objet. Voici comment l'utiliser dans la ligne de commande :

python click_example_2.py --numbers 1 2 
Comment créer vos propres programmes de ligne de commande en Python avec Click

Cliquez est la solution pour les utilitaires Python

Comme vous l'avez vu, Click est facile à utiliser mais très puissant. Bien que ces exemples ne couvrent que les bases de Click, il existe de nombreuses autres fonctionnalités que vous pouvez découvrir maintenant que vous maîtrisez parfaitement les bases.

Si vous recherchez des projets Python pour mettre en pratique vos nouvelles compétences, pourquoi ne pas apprendre à contrôler un Arduino avec Python, ou que diriez-vous de lire et d'écrire sur Google Sheets avec Python ? L'un ou l'autre de ces projets serait parfait pour la conversion en Click !


[]