Wir bringen Python und Bash zusammen: die Veröffentlichung der Bibliotheken Python-Shell und Smart-Env v. 1.0.1

Guten Tag allerseits!

Am 29. Februar 2020 fand die offizielle Mikroveröffentlichung von Smart-Env- und Python-Shell- Bibliotheken statt . Für diejenigen, die nicht Bescheid wissen, empfehle ich, dass Sie zuerst den ersten Beitrag lesen .

Kurz gesagt, die Änderungen umfassen die automatische Vervollständigung von Befehlen, die Erweiterung der Fähigkeit zum Ausführen von Befehlen, ein wenig Refactoring und Fehlerbehebungen.

Ich frage nach Details unter Katze.

Was ist neu in Python-Shell?


Ich fange gleich mit dem Dessert an.

Team-Abschluss


Zustimmen - ist es praktisch, wenn der Editor / die IDE / das Terminal den Namen des Befehls auffordert und manchmal Parameter aufruft? Python-Shell macht also ein wenig Fortschritte bei der Bereitstellung solcher Funktionen. Aufgrund der Tatsache, dass die Felder der Shell-Klasse unter der De-facto-Haube nicht ihre Felder sind (allgegenwärtig __getattr__), wurde die automatische Vervollständigung auch von Grund auf neu erstellt (durch Überladen der __dir__- Methode). Die automatische Vervollständigung wird derzeit in BPython- und IPython-Umgebungen ausgeführt. Natürlich möchte ich die Integration mit ehrwürdigeren Produkten wie PyCharm sehen, und in dieser Richtung untersuchen wir Implementierungsmöglichkeiten.

Eigenschaften hinzufügen


Im Rahmen der Version hat die Shell-Klasse eine neue last_command-Eigenschaft erhalten. Die Notwendigkeit dafür ergab sich aus der Tatsache, dass das Command-Objekt beim Auslösen einer ShellException durch einen Befehl mit einem Rückkehrcode ungleich Null nicht vom Aufruf __call __ () des Befehlsobjekts zurückgegeben wurde. Jetzt gibt es die Möglichkeit dazu:

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

Außerdem wurde die Liste der Eigenschaften des Befehlsobjekts erweitert. Das Fehlerfeld wurde hinzugefügt, das die Ausgabe des Befehls 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 passt (z. B. das bekannte Dienstprogramm 2to3). Ruf sie an mit

Shell.2to3()

schlägt fehl - der Interpreter überspringt nicht.
Die Lösung besteht darin, den Befehl in einer Problemumgehung aufzurufen:

Shell("2to3")  #   

Es ist erwähnenswert, dass es auf die gleiche Weise möglich ist, Befehle auszuführen, die aus Sicht des Interpreters gültig sind, so dass flexible Skripte wie erstellt werden können

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

Kleinere Änderungen


  • Die Methoden __repr __ () und __str __ () des Command-Objekts sind implementiert, die nun intuitive Werte erzeugen (ein Befehl mit Parametern bzw. dessen Standardauspuff).
  • Kleinere Korrekturen durch Code.
  • Hinzufügen der Testabdeckung sowie Neuorganisation bestehender Tests.
  • Hinzufügen der Unterprozess- und Prozessklassen, deren Zweck darin besteht, eine zusätzliche Abstraktionsebene zu erstellen, wenn mit dem Unterprozessmodul gearbeitet wird. Zum größten Teil ist es notwendig, Code-Wiederholungen zu vermeiden, wenn Sie mit Python 2/3 arbeiten, aber es kann möglicherweise andere Boni geben.

Was ist neu in smart-env?


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

Tatsächlich wurden die folgenden Änderungen an der Bibliothek vorgenommen:

  • Kleinere Korrekturen durch Code.
  • Refactoring
  • Reorganisation und Verfeinerung bestehender Tests.

Pläne für die nächste Version


Python-Shell-Bibliothek


  • Unterstützung für nicht blockierende Befehlsaufrufe hinzufügen (parallele Ausführung).

Smart-env-Bibliothek


  • Implementierung der Selbstvervollständigung von Umgebungsvariablen in der ENV-Klasse.
  • Unterstützung für den Operator in, um das Vorhandensein einer env-Variablen zu überprüfen.
  • Implementieren der Funktionen str () und repr () für die ENV-Klasse.

Die Termine der nächsten Releases werden zusätzlich in folgenden Kommunikationskanälen bekannt gegeben:


All Articles