Freundschaft zwischen Python und Bash schließen: Veröffentlichung der Bibliotheken python-shell und smart-env v. 1.0.1

Guten Tag an alle!

Februar 29 2020 Jahre Es fand eine offizielle Mikroveröffentlichung der Bibliotheken statt smart-env и Python-Shell. Für diejenigen, die sich nicht auskennen, empfehle ich, es zuerst zu lesen erster Beitrag.

Kurz gesagt umfassen die Änderungen die Befehlsvervollständigung, erweiterte Funktionen zum Ausführen von Befehlen, einige Refactorings und Fehlerbehebungen.

Einzelheiten entnehmen Sie bitte der Kat.-Nr.

Was ist neu in der Python-Shell?

Ich fange gleich mit dem Nachtisch an.

Befehlsvervollständigung

Stimmen Sie zu – ist es praktisch, wenn der Editor/die IDE/das Terminal Sie nach dem Namen des Befehls und manchmal sogar nach den Aufrufparametern fragt? Daher macht Python-Shell allmählich Fortschritte bei der Bereitstellung ähnlicher Funktionen. Aufgrund der Tatsache, dass die Felder der Shell-Klasse unter der Haube de facto nicht ihre Felder sind (das allgegenwärtige __getattr__), wurde die automatische Vervollständigung ebenfalls von Grund auf erstellt (durch Überladen der Methode __dir__). Die automatische Vervollständigung funktioniert derzeit in BPython- und IPython-Umgebungen. Natürlich würde ich mir eine Integration mit ehrwürdigeren Produkten wie PyCharm wünschen, und Implementierungsmöglichkeiten in diese Richtung werden derzeit geprüft.

Eigenschaften hinzufügen

Im Rahmen der Veröffentlichung erhielt die Shell-Klasse eine neue last_command-Eigenschaft. Die Notwendigkeit dafür entstand, weil, wenn eine ShellException von einem Befehl mit einem Rückgabecode ungleich Null ausgelöst wurde, das Command-Objekt nicht vom __call__()-Aufruf an das Command-Objekt zurückgegeben wurde. Jetzt gibt es die Möglichkeit dazu:

try:
    command = Shell.touch('/foo.txt')
except ShellException:
    command = Shell.last_command

Auch die Liste der Eigenschaften des Command-Objekts wurde erweitert. Es wurde ein Fehlerfeld hinzugefügt, das die Befehlsausgabe an den Fehlerstrom zurückgibt.

Ausführen von Befehlen mit ungültigen Python-Namen

Fast jedes System verfügt über mindestens ein Programm, dessen Name nicht als Bezeichner in Python geeignet ist (z. B. das bekannte Dienstprogramm 2to3). Ruf sie mit an

Shell.2to3()

Wenn es nicht funktioniert, lässt der Dolmetscher es nicht durch.
Die Lösung besteht darin, den Befehl auf Umwegen aufzurufen:

Shell("2to3")  # возвращает объект команды

Es ist erwähnenswert, dass Sie auf die gleiche Weise Befehle ausführen können, die aus Sicht des Interpreters gültig sind, was die Möglichkeit lässt, flexible Skripte wie zu erstellen

cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)

Kleinere Änderungen

  • Die Methoden __repr__() und __str__() des Command-Klassenobjekts wurden implementiert, die nun intuitive Werte erzeugen (einen Befehl mit Parametern bzw. seine stdout-Ausgabe).
  • Kleinere Codekorrekturen.
  • Testabdeckung hinzufügen und bestehende neu organisieren.
  • Hinzufügen der Klassen Subprocess und Process, deren Zweck darin besteht, eine zusätzliche Abstraktionsebene bei der Arbeit mit dem Subprocess-Modul zu schaffen. Wird hauptsächlich benötigt, um Codeduplizierungen bei der Arbeit mit Python 2/3 zu vermeiden, kann aber möglicherweise auch andere Vorteile bieten.

Was ist neu in smart-env?

Im Gegensatz zu Python-Shell gab es in der Smart-Env-Bibliothek weniger Änderungen. Der Grund dafür ist einfach: Mangel an freier Zeit, in der einige potenzielle Verbesserungen (z. B. automatische Vervollständigung von Umgebungsvariablen) auf die nächste Version verschoben wurden.

Tatsächlich wurden folgende Änderungen an der Bibliothek vorgenommen:

  • Kleinere Codekorrekturen.
  • Refactoring.
  • Neuorganisation und Verfeinerung bestehender Tests.

Pläne für die nächsten Veröffentlichungen

Python-Shell-Bibliothek

  • Unterstützung für nicht blockierende Befehlsaufrufe hinzugefügt (Parallelisierung der Ausführung).

Smart-Env-Bibliothek

  • Implementierung der automatischen Vervollständigung von Umgebungsvariablen in der ENV-Klasse.
  • Unterstützung für den in-Operator zur Überprüfung der Existenz einer env-Variablen.
  • Implementierung der Unterstützung für die Funktionen str() und repr() für die ENV-Klasse.

Die Termine der nächsten Veröffentlichungen werden über die folgenden Kommunikationskanäle bekannt gegeben:

Source: habr.com

Kommentar hinzufügen