Kombinieren Sie Python und Bash: Veröffentlichung der Bibliotheken python-shell und smart-env v. 1.0.1

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 ersten Beitrag.

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_command

Auch 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ĂŒck

Es 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:

Quelle: habr.com

Erwerben Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server đŸ”„ Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster