Petty Little Joy # 9: des applications console à visage humain

Les philosophes disent que les gens doivent être jugés non pas à quelle hauteur ils peuvent grimper, mais à quelle hauteur ils peuvent tomber.


Il existe de nombreux grands développeurs dans le monde qui peuvent produire des algorithmes spectaculaires, des architectures élégantes et un excellent code. Mais ces mêmes programmeurs prennent et écrivent du code organisé très médiocre pour un petit script de console pour calculer des analyses ou des correctifs de données dans la base de données. Aucune ventilation en classes et fonctions, arguments de passage maladroits, sortie primitive d'informations obscures à l'aide de print()


Aujourd'hui, nous allons discuter de la façon de créer de meilleurs programmes dont la plupart des gens ne se soucient pas - les utilitaires et les scripts de console jetables.


image


python-nubia


La bibliothèque de la deuxième plus grande société de bien au monde - Facebook. Les ingénieurs locaux, eux aussi, étaient fatigués du chaos dans les applications console, ils ont donc décidé de leur fournir une interface interactive. Bien sûr, textuel.


image


  • Saisie semi-automatique pour les fonctions disponibles dans votre script de console.
  • Vous pouvez connecter la saisie semi-automatique au niveau du terminal (fonctionne en bash et zsh).
  • Une barre d'état agréable et belle qui montrera à l'utilisateur ce qui se passe.
  • Conseils et validations sur les ensembles d'arguments de fonction et leurs types.

Termgraph


Avec la conclusion des informations sur la console, beaucoup ont généralement des problèmes. Comme indiqué ci-dessus, cela revient souvent à la simple sortie de print() . La lecture de ceci, bien sûr, n'est pas très pratique.


Afin de dessiner un dessin de ce qui se passe dans le programme, il y a un termgraph


Il vous permet de faire de telles images dans le terminal



Ou si compliqué



À l'aide d'une simple barre, vous pouvez montrer la progression du programme sous la forme d'une belle bande - et ce sera cool et beaucoup plus agréable d'imprimer des valeurs incompréhensibles.


En tissu


Les scripts à exécuter sur des machines distantes sont une douleur distincte. Bien sûr, nous vivons à l'ère DevOps, lorsque des tas de tâches sont résolues en utilisant Salt et Ansible. Mais il arrive également que vous deviez vous connecter régulièrement à un cluster de brouettes distantes et y exécuter des lots de commandes. Pour cela, il y a du tissu


  • Prise en charge de différentes listes d'hôtes - vous pouvez exécuter des commandes sur les serveurs de base de données, dans le cluster d'applications - il suffit d'écrire les voitures distantes dans le script.
  • Différentes politiques d'autorisation pour les brouettes - vous pouvez utiliser à la fois des clés et des mots de passe.
  • Répartition du script en sous-commandes, regroupement des sous-commandes en équipes plus importantes - vous pouvez créer une structure logique arbitrairement complexe du code que vous souhaitez exécuter.
  • Et, bien sûr, vous pouvez également interférer avec le code de commande du terminal dans le code!

Fabric est construit autour de Paramiko et en général, vous pouvez exécuter des commandes à l'aide de cette bibliothèque de communication SSH de bas niveau. Mais Fabric fournit le niveau d'abstraction nécessaire, ce qui le rend clair et facile à utiliser.


python-prompt-toolkit


Cette bibliothèque transforme un simple script en une application console vraiment puissante.


Par exemple, vous pouvez ajouter une ligne d'invite de commandes à une interface texte.


 from prompt_toolkit import prompt while 1: user_input = prompt('>') print(user_input) 

Et après cela, vous pouvez ajouter l'historique des commandes utilisées, tout comme dans votre terminal.


 from prompt_toolkit import prompt from prompt_toolkit.history import FileHistory while 1: user_input = prompt('>', history=FileHistory('history.txt'), ) print(user_input) 

Et vous pouvez créer des invites automatiques pour les lignes de l'historique des entrées.


 from prompt_toolkit import prompt from prompt_toolkit.history import FileHistory from prompt_toolkit.auto_suggest import AutoSuggestFromHistory while 1: user_input = prompt('>', history=FileHistory('history.txt'), auto_suggest=AutoSuggestFromHistory(), ) print(user_input) 

Et apprenez les invites automatiques à certaines commandes prédéfinies.


 from prompt_toolkit import prompt from prompt_toolkit.history import FileHistory from prompt_toolkit.auto_suggest import AutoSuggestFromHistory from prompt_toolkit.contrib.completers import WordCompleter SQLCompleter = WordCompleter(['select', 'from', 'insert', 'update', 'delete', 'drop'], ignore_case=True) while 1: user_input = prompt('SQL>', history=FileHistory('history.txt'), auto_suggest=AutoSuggestFromHistory(), completer=SQLCompleter, ) print(user_input) 

Liba est extrêmement simple et permet de créer votre propre interface cool et entièrement personnalisable.


Pourquoi ça?


L'attention aux programmes apparemment uniques vous permettra d'écrire non pas du code pour l'éjection, mais des outils de console qui peuvent être facilement réutilisés plus tard. Cela fait gagner du temps et, bien sûr, rend le travail avec vos scripts beaucoup plus agréable.

Source: https://habr.com/ru/post/fr463725/


All Articles