Accueil

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()

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

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

  1. -total:  Ceci est le nom de la ligne de commande pour le total  argument.
  2. 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.
  3. 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

Aide sur Python Click

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

Python Cliquez sur l'écran d'aide

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

Résultat Python Click nargs

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.






Nuage de tags

Choix de L'éditeur


Thomas Becket

Je suis un écrivain indépendant qui couvre la programmation et les logiciels.
Je suis étudiant en informatique et je m'intéresse à la programmation, aux logiciels et à la technologie
Gadgets technologiques et critiques 2019