Kleine Freude # 9: Konsolenanwendungen mit menschlichem Gesicht

Philosophen sagen, dass Menschen nicht danach beurteilt werden müssen, wie hoch sie klettern können, sondern danach, wie tief sie fallen können.


Es gibt viele großartige Entwickler auf der Welt, die spektakuläre Algorithmen, elegante Architekturen und großartigen Code erstellen können. Dieselben Programmierer verwenden und schreiben jedoch sehr mittelmäßig organisierten Code für ein kleines Konsolenskript zur Berechnung von Analysen oder Datenpatches in der Datenbank. Keine Aufteilung in Klassen und Funktionen, unbeholfene Übergabe von Argumenten, primitive Ausgabe obskurer Informationen mit print()


Heute werden wir darüber sprechen, wie Sie bessere Programme erstellen können, die den meisten Menschen egal sind - Einweg-Konsolendienstprogramme und -Skripte.


Bild


Python-Nubien


Die Bibliothek des zweitgrößten Unternehmens der Welt - Facebook. Auch die lokalen Ingenieure hatten das Chaos in Konsolenanwendungen satt und beschlossen, ihnen eine interaktive Oberfläche zur Verfügung zu stellen. Natürlich in Textform.


Bild


  • Autocomplete für Funktionen, die in Ihrem Konsolenskript verfügbar sind.
  • Sie können die automatische Vervollständigung auf Terminalebene verbinden (funktioniert in bash und zsh).
  • Eine angenehme und schöne Statusleiste, die dem Benutzer zeigt, was gerade passiert.
  • Hinweise und Validierungen zu Gruppen von Funktionsargumenten und deren Typen.

Termgraph


Mit dem Abschluss der Informationen an die Konsole haben viele im Allgemeinen Probleme. Wie oben erwähnt, kommt es oft auf die einfache Ausgabe von print() . Dies zu lesen ist natürlich nicht sehr bequem.


Um zu zeichnen, was im Programm passiert, gibt es einen Termgraphen


Sie können solche Bilder im Terminal erstellen



Oder so komplizierter



Mit einem einfachen Balken können Sie den Fortschritt des Programms in Form eines schönen Streifens anzeigen - und dies ist cool und viel angenehmer, um unverständliche Werte zu drucken.


Stoff


Skripte, die auf Remotecomputern ausgeführt werden sollen, sind ein separater Schmerz. Natürlich leben wir im DevOps-Zeitalter, in dem jede Menge Aufgaben mit Salt und Ansible gelöst werden. Es kommt aber auch vor, dass Sie sich regelmäßig bei einer Gruppe entfernter Schubkarren anmelden und dort mehrere Befehle ausführen müssen. Dafür gibt es Stoff


  • Unterstützung für verschiedene Hostlisten - Sie können Befehle auf den Datenbankservern im Anwendungscluster ausführen - schreiben Sie einfach die Remote-Autos in das Skript.
  • Unterschiedliche Berechtigungsrichtlinien für Schubkarren - Sie können sowohl Schlüssel als auch Kennwörter verwenden.
  • Aufteilung des Skripts in Unterbefehle, Gruppierung von Unterbefehlen in größere Teams - Sie können eine beliebig komplexe logische Struktur des Codes erstellen, den Sie ausführen möchten.
  • Und natürlich können Sie auch den Terminalbefehlscode im Code stören!

Fabric basiert auf Paramiko und im Allgemeinen können Sie Befehle mit dieser einfachen SSH-Kommunikationsbibliothek ausführen. Fabric bietet jedoch die erforderliche Abstraktionsebene, die die Verwendung klar und einfach macht.


Python-Prompt-Toolkit


Diese Bibliothek verwandelt ein einfaches Skript in eine wirklich leistungsstarke Konsolenanwendung.


Beispielsweise können Sie einer Textschnittstelle eine Eingabeaufforderungszeile hinzufügen.


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

Danach können Sie den Verlauf der verwendeten Befehle wie in Ihrem Terminal hinzufügen.


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

Außerdem können Sie automatische Eingabeaufforderungen für Zeilen aus dem Eingabeverlauf erstellen.


 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) 

Und lernen Sie bestimmte vordefinierte Befehle automatisch auf.


 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 ist extrem einfach und ermöglicht es Ihnen, Ihre eigene coole und vollständig anpassbare Benutzeroberfläche zu erstellen.


Warum ist das so?


Wenn Sie auf scheinbar einmalige Programme achten, können Sie keinen Code zum Auswerfen schreiben, sondern Konsolentools, die später problemlos wiederverwendet werden können. Dies spart Zeit und macht das Arbeiten mit Ihren Skripten natürlich viel angenehmer.

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


All Articles