Guten Tag allerseits!
29. Februar 2020 hat die offizielle Mikroversion der Bibliotheken stattgefunden smart-env und python-shell. Wer nicht informiert ist, sollte zuerst lesen .
Kurz gesagt, unter den Ănderungen gibt es die AutovervollstĂ€ndigung von Befehlen, erweiterte Möglichkeiten zum AusfĂŒhren von Befehlen, ein wenig Refactoring und Bugfixes.
FĂŒr Details bitte nach dem Klicken.
Was gibt es Neues im python-shell?
Ich fange gleich mit dem Wesentlichen an.
Automatische VervollstÀndigung von Befehlen
Es ist doch praktisch, wenn der Editor/IDE/Terminal den Befehl und manchmal auch die Parameter vorschlĂ€gt, oder? Und so macht python-shell schrittweise Fortschritte, um diese FunktionalitĂ€t bereitzustellen. Da die Felder der Klasse Shell intern de facto keine Felder davon sind (allgegenwĂ€rtiges __getattr__), wurde die AutovervollstĂ€ndigung ebenfalls von Grund auf neu entwickelt (durch Ăberschreibung der Methode __dir__). Momentan funktioniert die AutovervollstĂ€ndigung in den Umgebungen BPython und IPython. NatĂŒrlich wĂ€re es schön, eine Integration mit bekannteren Produkten wie PyCharm zu sehen, und in diese Richtung wird die Umsetzungsmöglichkeiten untersucht.
HinzufĂŒgen von Eigenschaften
Im Rahmen des Releases hat die Klasse Shell eine neue Eigenschaft last_command erhalten. Der Bedarf entstand, weil bei der Generierung einer Ausnahme ShellException durch einen Befehl mit einem ungleich null RĂŒckgabecode das Objekt Command nicht aus dem Aufruf __call__() des Objekts zurĂŒckgegeben wurde. Jetzt gibt es die Möglichkeit, es so zu machen:
try:
command = Shell.touch('/foo.txt')
except ShellException:
command = Shell.last_commandZudem hat sich die Liste der Eigenschaften des Objekts Command erweitert. Es wurde ein Feld errors hinzugefĂŒgt, das die Ausgabe des Befehls im Fehlerstrom zurĂŒckgibt.
AusfĂŒhren von Befehlen mit Python-invaliden Namen
In praktisch jedem System gibt es mindestens ein Programm, dessen Name sich nicht als Identifikator in Python eignet (zum Beispiel das bekannte Tool 2to3). Es lÀsst sich nicht mit
Shell.2to3() auffrufen â der Interpreter erlaubt dies nicht.
Die Lösung besteht darin, den Befehl indirekt aufzurufen:
Shell("2to3") # gibt das Befehlsobjekt zurĂŒckEs ist zu beachten, dass man auf die gleiche Weise auch validen Befehle im Sinne des Interpreters starten kann, was die Möglichkeit lĂ€sst, 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 jetzt intuitiv verstÀndliche Werte liefern (der Befehl mit Parametern und dessen stdout-Ausgabe entsprechend).
- Kleinere Fehlerbehebungen im Code.
- HinzufĂŒgen von Tests zur Abdeckung sowie Neuorganisation der bestehenden.
- HinzufĂŒgen der Klassen Subprocess und Process, deren Ziel es ist, eine zusĂ€tzliche Abstraktionsebene bei der Arbeit mit dem Subprozess-Modul zu schaffen. Dies ist hauptsĂ€chlich erforderlich, um Codewiederholungen bei der Arbeit mit Python 2/3 zu vermeiden, könnte aber auch andere Vorteile mit sich bringen.
Was ist neu in smart-env?
Im Gegensatz zu python-shell gab es in der Bibliothek smart-env weniger Ănderungen. Der Grund dafĂŒr ist einfach â es mangelte an Zeit, weshalb einige potenzielle Verbesserungen (wie die automatische VervollstĂ€ndigung von Umgebungsvariablen) auf die nĂ€chste Version verschoben wurden.
TatsĂ€chlich wurden in der Bibliothek folgende Ănderungen vorgenommen:
- Kleinere Fehlerbehebungen im Code.
- Refactoring.
- Neuorganisation und Ăberarbeitung der vorhandenen Tests.
PlĂ€ne fĂŒr die nĂ€chsten Versionen
Die Bibliothek python-shell
- EinfĂŒhrung der 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.
- UnterstĂŒtzung des Operators in zur ĂberprĂŒfung der Existenz von env-Variablen.
- Implementierung der UnterstĂŒtzung der Funktionen str() und repr() fĂŒr die Klasse ENV.
Zu den Terminen der nĂ€chsten Versionen wird zusĂ€tzlich ĂŒber folgende KommunikationskanĂ€le informiert:
- Aktualisierung in diesem Artikel.
Quelle: habr.com
