Comment créer vos propres programmes de ligne de commande en Python en cliquant sur
Added 2018-09-27
Click est un package Python permettant d'écrire des interfaces de ligne de commande. Il produit une belle documentation pour vous et vous permet de construire des interfaces de ligne de commande en une seule ligne de code. En bref: c’est génial et cela peut vous aider à faire passer vos programmes au niveau supérieur.
Voici comment l’utiliser pour animer vos projets Python.
Écriture de 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é. Voulez-vous ajouter une nouvelle option? Vous allez alors modifier votre fonction d’aide.
Il n’ya rien de mal à écrire votre propre code, c’est un excellent moyen d’apprendre le python, mais Click vous permet de suivre les principes «Ne vous répétez pas» (DRY). Sans Click, vous écrirez un code fragile et nécessitant beaucoup de maintenance à chaque changement.
Voici une interface simple en ligne de commande codée sans Clic:
système d'importation
importer au hasard
def do_work ():
"" "Fonction permettant de 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 dans args:
si un == '--help':
print ('programme de base en ligne de commande')
print ('Options:')
print ('--help ->
afficher ce menu d'aide de base. ')
print ('--monty ->
montrer une citation de Monty Python. ')
print ('--veg ->
montrer un légume au hasard ')
elif a == '--monty':
print ('Qu'est-ce que c'est, alors? "Romanes eunt domus"? Les gens s'appellent Romanes, ils vont, la maison?')
elif a == '--veg':
print (random.choice (['Carrot', 'Pomme de terre', 'Navet']))
autre:
print ('Argument non reconnu.')
si __name__ == '__main__':
faire du travail()
Ces 27 lignes de Python fonctionnent bien mais sont très fragiles. Toute modification apportée à votre programme nécessitera de nombreux autres codes de support. Si vous modifiez un nom d'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 aléatoire.')
def do_work (monty, veg):
"" "Un exemple de clic de base suivra vos commandes" ""
si monty:
print ('Qu'est-ce que c'est, alors? "Romanes eunt domus"? Les gens s'appellent Romanes, ils vont, la maison?')
si veg:
print (random.choice (['Carrot', 'Pomme de terre', 'Navet']))
si __name__ == '__main__':
faire du travail()
Cet exemple de clic 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é:
Cette comparaison de base indique le temps et les efforts que vous pouvez économiser en utilisant des programmes tels que Click. Bien que l’interface de ligne de commande puisse sembler identique à l’utilisateur final, le code sous-jacent est plus simple et vous permettra d’économiser beaucoup de temps. Toute modification ou mise à jour que vous rédigerez à l'avenir entraînera également une augmentation significative du temps de développement.
Débuter avec Click for Python
Enfin, assurez-vous d’exécuter Python version 3. Il est possible d’utiliser Click avec Python version 2, mais ces exemples se trouvent dans Python 3. En savoir plus sur les différences entre Python 2 et Python 3 .
Une fois prêt, installez Click à partir de la ligne de commande à l'aide de PIP ( comment installer PIP pour Python ):
pip installer clic
Écrire votre programme de premier clic
Dans un éditeur de texte, commencez par importer Click:
clic d'importation
Une fois importé, créez un méthode et un principale point d'accès. Notre Guide du débutant sur la programmation orientée objet de Python Guide de programmation orientée objet en python Les couvre plus en détail, mais ils fournissent un endroit pour stocker votre code, et un moyen pour que Python commence à l'exécuter:
clic d'importation
importer au hasard
def veg ():
"" "La méthode de base retournera un légume aléatoire" ""
print (random.choice (['carotte', 'pomme de terre', 'navet', 'panais']))
si __name__ == '__main__':
veg ()
Ce script très simple produira un légume aléatoire. Votre code peut avoir un aspect différent, mais cet exemple simple est parfait à combiner avec Click.
Enregistrer ceci sous click_example.py , puis exécutez-le dans la ligne de commande (après avoir accédé à son emplacement):
python click_example.py
Vous devriez voir un nom de légume au hasard. Améliorons les choses en ajoutant Click. Changez votre code pour inclure les décorateurs Click et un pour boucle:
@ click.command ()
@ click.option ('- total', par défaut = 3, help = 'Nombre de légumes à produire.')
def veg (total):
"" "La méthode de base retournera un légume aléatoire" ""
pour nombre dans la gamme (total):
print (random.choice (['carotte', 'pomme de terre', 'navet', 'panais']))
si __name__ == '__main__':
veg ()
En cours d'exécution, vous verrez un légume aléatoire affiché trois fois.
Décomposons ces changements. le @ click.command () Le décorateur configure Cliquez pour utiliser la fonction qui suit 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.
le @ click.option decorator configure click pour accepter les paramètres de la ligne de commande, qu'il transmettra à votre méthode. Il y a trois arguments utilisés ici:
- -total: Ceci est le nom de la ligne de commande pour le total argument.
- défaut: Si vous ne spécifiez pas le total des arguments lors de l’utilisation de votre script, Click utilisera la valeur par défaut.
- Aidez-moi: Une courte phrase expliquant comment utiliser votre programme.
Voyons Click en action. A partir de la ligne de commande, lancez votre script, mais transmettez le total argument comme ceci:
python click_example.py --total 10
En mettant –Total 10 à partir de la ligne de commande, votre script imprimera dix légumes au hasard.
Si vous passez dans le -Aidez-moi vous verrez une belle page d’aide, ainsi que les options que vous pouvez utiliser:
python click_example.py --help
Ajouter plus de commandes
Il est possible d’utiliser plusieurs décorateurs de clic sur la même fonction. Ajouter une autre option de clic à la veg une fonction:
@ click.option ('- sauce', default = False, help = 'Ajouter "avec sauce" aux légumes.')
N’oubliez pas de transmettre ceci à la méthode:
def veg (total, sauce):
Maintenant, lorsque vous exécutez votre fichier, vous pouvez passer le sauce drapeau:
python click_example.py --gravy y
L'écran d'aide a également changé:
Voici le code entier (avec quelques modifications mineures pour la propreté):
clic d'importation
importer au hasard
@ click.command ()
@ click.option ('- sauce', default = False, help = 'Ajouter "avec sauce" aux légumes.')
@ click.option ('- total', par défaut = 3, help = 'Nombre de légumes à produire.')
def veg (total, sauce):
"" "La méthode de base retournera un légume aléatoire" ""
pour nombre dans la gamme (total):
choice = random.choice (['Carotte', 'Pomme de terre', 'Navet', 'Panais'])
si sauce:
print (f '{choix} avec sauce')
autre:
imprimer (choix)
si __name__ == '__main__':
veg ()
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 tuple. Vous pouvez en apprendre plus sur les n-uplets 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." ""
passer
si __name__ == '__main__':
ajouter()
Il n’ya rien de nouveau ici. La section précédente explique ce code en détail. Ajouter un @ click.option appelé Nombres :
@ click.option ('- numbers', nargs = 2, tapez = int, help = 'Ajoutez deux nombres ensemble.')
Le seul nouveau code ici sont les nargues = 2 , et le type = int options. Ceci dit à Click d'accepter deux valeurs pour le Nombres option, et qu'ils doivent tous deux être de type entier. Vous pouvez le remplacer par n'importe quel nombre ou type de données (valide) de votre choix.
Enfin, changez le ajouter méthode pour accepter le Nombres argument, et faire 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 la Nombres objet. Voici comment l'utiliser en ligne de commande:
python click_example_2.py --numbers 1 2
Cliquez sur la solution pour les utilitaires Python
Comme vous avez pu le constater, 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 sur lesquelles vous pouvez en apprendre davantage maintenant que vous maîtrisez parfaitement les bases.