Guten Tag allerseits!
29. Februar 2020 fand die offizielle Mikroveröffentlichung der Bibliotheken statt smart-env und python-shell. Für diejenigen, die nicht im Bilde sind, empfehle ich, zuerst den .
kurz zusammengefasst: Zu den Änderungen gehören die Autovervollständigung von Befehlen, erweiterte Möglichkeiten zum Ausführen von Befehlen, etwas Refactoring und Bugfixes.
Für Details bitte nach unten scrollen.
Was gibt es Neues bei python-shell?
Ich beginne gleich mit dem Highlight.
GitHub-Repository.
Zustimmen Sie: Es ist praktisch, wenn der Editor/IDE/Terminal den Namen des Befehls und manchmal auch die Parameter vorschlägt? Genau in diese Richtung entwickelt sich auch python-shell allmählich. Da die Klassenfelder von Shell im Unterbau de facto keine eigenen sind (allseits bekanntes __getattr__), wurde die Autovervollständigung ebenfalls von Grund auf neu erstellt (durch Überladung der Methode __dir__). Momentan funktioniert die Autovervollständigung in den Umgebungen BPython und IPython. Natürlich wäre es wünschenswert, eine Integration mit etablierten Produkten wie PyCharm zu sehen, und in dieser Richtung wird die Machbarkeit untersucht.
Hinzufügen von Eigenschaften
Im Rahmen des Releases hat die Shell-Klasse eine neue Eigenschaft last_command erhalten. Die Notwendigkeit dafür ergab sich, weil beim Generieren einer ShellException durch einen Befehl mit einem von Null abweichenden Rückgabewert das Command-Objekt nicht aus dem Aufruf von __call__() des Befehls zurückgegeben wurde. Nun gibt es die Möglichkeit, Folgendes zu tun:
try:
command = Shell.touch('/foo.txt')
except ShellException:
command = Shell.last_commandAuch die Liste der Eigenschaften des Command-Objekts wurde erweitert. Ein Feld errors wurde hinzugefügt, das die Ausgabe des Befehls im Fehlerstream zurückgibt.
Ausführen von Befehlen mit für Python ungültigen Namen
Fast in jedem System gibt es zumindest ein Programm, dessen Name nicht als Identifikator in Python geeignet ist (zum Beispiel das bekannte Werkzeug 2to3). Es lässt sich nicht mit
Shell.2to3() aufrufen – der Interpreter wird dies nicht zulassen.
Die Lösung besteht darin, den Befehl umzugehen:
Shell("2to3") # gibt das Befehlsobjekt zurückEs sei bemerkt, dass man auf diese Weise auch gültige Befehle aus Sicht des Interpreters ausführen kann, was die Möglichkeit bietet, flexible Skripte wie
cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)Kleinere Änderungen
- Die Methoden __repr__() und __str__() der Klasse Command wurden implementiert, die nun intuitive Ausgaben liefern (den Befehl mit Parametern und seinen stdout-Ausgang entsprechend).
- Kleinere Code-Korrekturen.
- Hinzufügen von Testabdeckungen sowie Reorganisation bestehender Tests.
- Die Klassen Subprocess und Process wurden hinzugefügt, um eine zusätzliche Abstraktionsebene beim Arbeiten mit dem subprocess-Modul zu schaffen. Dies ist hauptsächlich notwendig, um Code-Wiederholungen bei der Nutzung von Python 2/3 zu beseitigen, kann aber potenziell auch andere Vorteile bieten.
Was gibt es Neues in smart-env?
Im Vergleich zur python-shell gab es in der Bibliothek smart-env weniger Änderungen. Der Grund dafür ist einfach – Mangel an Zeit, wodurch einige potenzielle Verbesserungen (zum Beispiel die automatische Vervollständigung von Umgebungsvariablen) auf die nächste Version verschoben wurden.
Tatsächlich wurden in der Bibliothek folgende Änderungen vorgenommen:
- Kleinere Code-Korrekturen.
- Refactoring.
- Reorganisation und Überarbeitung der vorhandenen Tests.
Pläne für die nächsten Versionen.
Die Bibliothek python-shell.
- Hinzufügen von Unterstützung für nicht blockierende Befehlsaufrufe (Parallelisierung der Ausführung).
Die Bibliothek smart-env.
- Implementierung der automatischen Vervollständigung von Umgebungsvariablen in der Klasse ENV.
- Betriebssystemunterstützung zur Überprüfung der Existenz von Umgebungsvariablen.
- Implementierung der Unterstützung von str()- und repr()-Funktionen für die ENV-Klasse.
Über die Termine der nächsten Releases wird in den folgenden Kommunikationskanälen weiter informiert:
- Aktualisierung in diesem Artikel.
Quelle: habr.com
