Vriendschap tussen Python en Bash tot stand brengen: vrijgave van de python-shell en smart-env v-bibliotheken. 1.0.1

Goede dag voor iedereen!

Februari 29 2020 jaar Er vond een officiële micro-release van bibliotheken plaats slimme omgeving и python-schaal. Voor degenen die het nog niet weten, raad ik aan om het eerst te lezen eerste post.

Kortom, de veranderingen omvatten het voltooien van opdrachten, uitgebreide mogelijkheden voor het uitvoeren van opdrachten, enkele refactoring en bugfixes.

Voor details zie cat.

Wat is er nieuw in Pythonshell?

Ik begin meteen met het dessert.

Voltooiing van de opdracht

Mee eens - is het handig als de editor/IDE/terminal je om de naam van het commando vraagt, en soms zelfs om de oproepparameters? Python-shell boekt dus geleidelijk vooruitgang bij het bieden van vergelijkbare functionaliteit. Vanwege het feit dat de velden van de klasse Shell onder de motorkap de facto niet de velden ervan zijn (de alomtegenwoordige __getattr__), werd automatisch aanvullen ook helemaal opnieuw gemaakt (door respectievelijk de methode __dir__ te overbelasten). Automatisch aanvullen werkt momenteel in BPython- en IPython-omgevingen. Natuurlijk zou ik graag integratie zien met meer eerbiedwaardige producten zoals PyCharm, en implementatiemogelijkheden in deze richting worden bestudeerd.

Eigenschappen toevoegen

Als onderdeel van de release heeft de klasse Shell een nieuwe eigenschap last_command ontvangen. De noodzaak hiervoor ontstond omdat wanneer een ShellException werd gegenereerd door een opdracht met een retourcode die niet nul was, het Command-object niet werd geretourneerd door de aanroep __call__() naar het opdrachtobject. Nu is er een mogelijkheid om dit te doen:

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

De lijst met eigenschappen van het Command-object is ook uitgebreid. Er is een foutenveld toegevoegd dat de opdrachtuitvoer retourneert naar de foutenstroom.

Opdrachten uitvoeren met ongeldige Python-namen

Bijna elk systeem heeft minstens één programma waarvan de naam niet geschikt is als identificatiemiddel in Python (bijvoorbeeld het bekende 2to3-hulpprogramma). Bel haar met

Shell.2to3()

Lukt het niet, dan laat de tolk het niet door.
De oplossing is om het commando via een rotonde aan te roepen:

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

Het is vermeldenswaard dat u op dezelfde manier opdrachten kunt uitvoeren die geldig zijn vanuit het gezichtspunt van de tolk, wat de mogelijkheid biedt om flexibele scripts te maken, zoals

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

Kleine veranderingen

  • De methoden __repr__() en __str__() van het klasseobject Command zijn geïmplementeerd, die nu intuïtieve waarden produceren (respectievelijk een commando met parameters en de stdout-uitvoer ervan).
  • Kleine codefixes.
  • Testdekking toevoegen en bestaande reorganiseren.
  • Het toevoegen van de klassen Subprocess en Process, met als doel een extra abstractieniveau te creëren bij het werken met de subprocesmodule. Dit is vooral nodig om duplicatie van code te elimineren bij het werken met Python 2/3, maar kan mogelijk ook andere bonussen opleveren.

Wat is er nieuw in smart-env?

In tegenstelling tot Python-shell zijn er minder wijzigingen geweest in de smart-env-bibliotheek. De reden hiervoor is simpel: gebrek aan vrije tijd, gedurende welke enkele potentiële verbeteringen (bijvoorbeeld het automatisch aanvullen van omgevingsvariabelen) naar de volgende release zijn verplaatst.

In feite zijn de volgende wijzigingen aangebracht in de bibliotheek:

  • Kleine codefixes.
  • Refactoring.
  • Reorganisatie en verfijning van bestaande tests.

Plannen voor volgende releases

Python-shell-bibliotheek

  • Ondersteuning toegevoegd voor niet-blokkerende opdrachtaanroepen (parallelisering van uitvoering).

smart-env-bibliotheek

  • Implementatie van automatische aanvulling van omgevingsvariabelen in de ENV-klasse.
  • Ondersteuning voor de in-operator om het bestaan ​​van een env-variabele te controleren.
  • Implementatie van ondersteuning voor de functies str() en repr() voor de klasse ENV.

De data van de volgende releases zullen verder worden aangekondigd via de volgende communicatiekanalen:

Bron: www.habr.com

Voeg een reactie