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
