Vous voulez créer vos propres programmes en ligne de commande Python, mais vous trouvez cela trop difficile?  Utilisez Click, un outil Python utile pour rationaliser votre code.

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

Publicité 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 peut aider vos programmes à passer au niveau supérieur. Voi

Publicité

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 peut aider vos programmes à passer au niveau supérieur.

Voici comment vous pouvez 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'effort 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 modifierez alors votre fonction d’aide.

Il n'y a rien de mal à écrire votre propre code, et le faire 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 un code fragile et nécessitant beaucoup de maintenance chaque fois que des changements se produisent.

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

 import sys import random def do_work(): """ Function to handle command line usage""" args = sys.argv args = args[1:] # First element of args is the file name if len(args) == 0: print('You have not passed any commands in!') else: for a in args: if a == '--help': print('Basic command line program') print('Options:') print(' --help -> show this basic help menu.') print(' --monty -> show a Monty Python quote.') print(' --veg -> show a random vegetable') elif a == '--monty': print('What\'s this, then? "Romanes eunt domus"? People called Romanes, they go, the house?') elif a == '--veg': print(random.choice(['Carrot', 'Potato', 'Turnip'])) else: print('Unrecognised argument.') if __name__ == '__main__': do_work() 

Exemple d'interface de ligne de commande Python

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 devez mettre à jour les informations d'aide. Ce code peut facilement devenir incontrôlable.

Voici la même logique avec Click:

 import click import random @click.command() @click.option('--monty', default=False, help='Show a Monty Python quote.') @click.option('--veg', default=False, help='Show a random vegetable.') def do_work(monty, veg): """ Basic Click example will follow your commands""" if monty: print('What\'s this, then? "Romanes eunt domus"? People called Romanes, they go, the house?') if veg: print(random.choice(['Carrot', 'Potato', 'Turnip'])) if __name__ == '__main__': do_work() 

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é:

Écran d'aide généré automatiquement avec Python Click

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 de gagner 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

Avant d’utiliser Click, vous voudrez peut-être configurer un environnement virtuel. Apprenez à utiliser l’environnement virtuel Python. Apprenez à utiliser l’environnement virtuel Python. Que vous soyez un développeur expérimenté Python ou que vous commenciez tout juste à apprendre à configurer un environnement virtuel. est essentiel pour tout projet Python. Lire la suite . Cela empêchera vos packages Python d'entrer en conflit avec votre système Python ou avec d'autres projets sur lesquels vous pouvez travailler. Vous pouvez également essayer Python dans votre navigateur Essayez Python dans votre navigateur avec ces shells interactifs gratuits en ligne Essayez Python dans votre navigateur avec ces shells interactifs en ligne gratuits Que vous passiez en revue ces exemples Python ou examiniez les bases des tableaux et listes, vous pouvez Testez le code directement dans votre navigateur. Voici les meilleurs interprètes en ligne Python que nous avons trouvés. Lisez Plus si vous voulez jouer avec Python et Click.

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. Pour 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 en utilisant PIP (comment installer PIP pour Python):

 pip install click 

Écrire votre programme de premier clic

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

 import click 

Une fois importé, créez une méthode et un point d’entrée principal . Notre guide d'utilisation ciblée Python traite de ces problèmes plus en détail, mais ils fournissent un emplacement pour stocker votre code et un moyen pour Python de commencer à l'exécuter:

 import click import random def veg(): """ Basic method will return a random vegetable""" print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip'])) if __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.

Enregistrez-le en tant que click_example.py, puis exécutez-le en 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 une boucle for :

 @click.command() @click.option('--total', default=3, help='Number of vegetables to output.') def veg(total): """ Basic method will return a random vegetable""" for number in range(total): print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip'])) if __name__ == '__main__': veg() 

Lors de l'exécution, vous verrez un légume aléatoire affiché trois fois.

Décomposons ces changements. Le décorateur @ click.command () configure Click pour qu'il fonctionne avec la fonction qui suit immédiatement le décorateur. Dans ce cas, il s’agit de la fonction veg () . Vous en aurez besoin pour chaque méthode que vous souhaitez utiliser avec Click.

Le décorateur @ click.option 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:

  1. –Total: Il s'agit du nom de la ligne de commande pour l'argument total .
  2. default: Si vous ne spécifiez pas l'argument total lors de l'utilisation de votre script, Click utilisera la valeur par défaut.
  3. help: Une courte phrase expliquant comment utiliser votre programme.

Voyons Click en action. A partir de la ligne de commande, lancez votre script, mais transmettez l'argument total comme ceci:

 python click_example.py --total 10 

En définissant –total 10 à partir de la ligne de commande, votre script imprimera dix légumes au hasard.

Si vous passez l'indicateur –help, vous verrez une belle page d'aide, avec les options que vous pouvez utiliser:

 python click_example.py --help 

Aide sur Python Click

Ajouter plus de commandes

Il est possible d'utiliser plusieurs décorateurs de clic sur la même fonction. Ajoutez une autre option de clic à la fonction veg :

 @click.option('--gravy', default=False, help='Append "with gravy" to the vegetables.') 

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

 def veg(total, gravy): 

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

 python click_example.py --gravy y 

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

Python Cliquez sur l'écran d'aide

Voici le code entier (avec quelques modifications mineures pour la propreté):

 import click import random @click.command() @click.option('--gravy', default=False, help='Append "with gravy" to the vegetables.') @click.option('--total', default=3, help='Number of vegetables to output.') def veg(total, gravy): """ Basic method will return a random vegetable""" for number in range(total): choice = random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip']) if gravy: print(f'{choice} with gravy') else: print(choice) if __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 un 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:

 import click import random @click.command() def add(): """ Basic method will add two numbers together.""" pass if __name__ == '__main__': add() 

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

 @click.option('--numbers', nargs=2, type=int, help='Add two numbers together.') 

Les seuls nouveaux codes ici sont les options nargs = 2 et type = int . Cela indique à Click d'accepter deux valeurs pour l'option de nombres et qu'elles doivent être de type entier. Vous pouvez le remplacer par n'importe quel nombre ou type de données (valide) de votre choix.

Enfin, modifiez la méthode add pour accepter l’argument numbers et effectuez certains traitements avec eux:

 def add(numbers): """ Basic method will add two numbers together.""" result = numbers[0] + numbers[1] print(f'{numbers[0]} + {numbers[1]} = {result}') 

Chaque valeur que vous transmettez est accessible via l’objet numbers . Voici comment l'utiliser en ligne de commande:

 python click_example_2.py --numbers 1 2 

Résultat Python Click nargs

Cliquez sur 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 sur lesquelles vous pouvez en apprendre davantage maintenant que vous maîtrisez parfaitement les bases.

Si vous êtes à la recherche de projets Python pour mettre en pratique vos nouvelles compétences, pourquoi ne pas apprendre à contrôler un Arduino avec Python Comment programmer et contrôler un Arduino avec Python Comment programmer et contrôler un Arduino avec Python Malheureusement, il est impossible pour programmer directement un Arduino en Python, mais vous pouvez le contrôler via USB en utilisant un programme Python. Voici comment. En savoir plus ou comment lire et écrire dans Google Sheets avec Python Comment lire et écrire dans Google Sheets avec Python Comment lire et écrire dans Google Sheets avec Python Python peut sembler étrange et inhabituel, mais il est facile à apprendre et à utiliser. Dans cet article, je vais vous montrer comment lire et écrire sur Google Sheets à l'aide de Python. Lire la suite ? L'un ou l'autre de ces projets serait parfait pour la conversion en Click!

Explorez plus: Didacticiels de codage, Python.