Tworzenie przyjaźni Pythona i Basha: wydanie bibliotek Python-Shell i Smart-env v. 1.0.1

оброго времени суток всем!

Luty 29 2020 roku odbyło się oficjalne mikrowydanie bibliotek inteligentne środowisko и powłoka Pythona. Tym, którzy nie są obeznani, radzę najpierw przeczytać pierwszy post.

Krótko mówiąc, zmiany obejmują uzupełnianie poleceń, rozszerzone możliwości uruchamiania poleceń, niektóre refaktoryzacje i poprawki błędów.

Szczegóły można znaleźć w kat.

Co nowego w powłoce Pythona?

Zacznę od razu od deseru.

Zakończenie polecenia

Zgadzam się - jest to wygodne, gdy edytor/IDE/terminal pyta o nazwę polecenia, a czasem nawet o parametry wywołania? Zatem powłoka Pythona stopniowo czyni postępy w zapewnianiu podobnej funkcjonalności. Z uwagi na to, że znajdujące się pod maską pola klasy Shell nie są de facto jej polami (wszechobecny __getattr__), autouzupełnianie również zostało stworzone od podstaw (odpowiednio poprzez przeciążenie metody __dir__). Autouzupełnianie działa obecnie w środowiskach BPython i IPython. Oczywiście chciałbym zobaczyć integrację z bardziej szanowanymi produktami, takimi jak PyCharm i badane są możliwości wdrożenia w tym kierunku.

Dodawanie właściwości

W ramach wydania klasa Shell otrzymała nową właściwość last_command. Było to potrzebne, ponieważ gdy polecenie z niezerowym kodem powrotu spowodowało zgłoszenie wyjątku ShellException, obiekt Command nie został zwrócony przez wywołanie __call__() do obiektu polecenia. Teraz jest ku temu okazja:

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

Rozszerzyła się także lista właściwości obiektu Command. Dodano pole błędów, które zwraca dane wyjściowe polecenia do strumienia błędów.

Uruchamianie poleceń z nieprawidłowymi nazwami języka Python

Prawie każdy system posiada przynajmniej jeden program, którego nazwa nie nadaje się jako identyfikator w Pythonie (przykładowo dobrze znane narzędzie 2to3). Zadzwoń do niej

Shell.2to3()

Jeśli to nie zadziała, tłumacz tego nie przepuści.
Rozwiązaniem jest wywołanie polecenia w okrężny sposób:

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

Warto zaznaczyć, że w ten sam sposób można uruchamiać polecenia ważne z punktu widzenia interpretera, co pozostawia możliwość tworzenia elastycznych skryptów typu

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

Drobne zmiany

  • Zaimplementowano metody __repr__() i __str__() obiektu klasy Command, które obecnie generują intuicyjne wartości (odpowiednio polecenie z parametrami i jego standardowe wyjście).
  • Drobne poprawki kodu.
  • Dodawanie pokrycia testowego, a także reorganizacja istniejących.
  • Dodanie klas Subprocess i Process, których celem jest stworzenie dodatkowego poziomu abstrakcji podczas pracy z modułem subprocess. Głównie potrzebne do wyeliminowania duplikacji kodu podczas pracy z Pythonem 2/3, ale potencjalnie mogą zapewnić również inne bonusy.

Co nowego w smart-env?

W przeciwieństwie do Pythona-Shell, w bibliotece smart-env wprowadzono mniej zmian. Powód tego jest prosty – brak wolnego czasu, podczas którego niektóre potencjalne ulepszenia (np. autouzupełnianie zmiennych środowiskowych) zostały przeniesione do kolejnej wersji.

W rzeczywistości w bibliotece wprowadzono następujące zmiany:

  • Drobne poprawki kodu.
  • Refaktoryzacja.
  • Reorganizacja i udoskonalenie istniejących testów.

Plany na kolejne wydania

biblioteka powłoki Pythona

  • Dodanie obsługi nieblokujących wywołań poleceń (równoległość wykonywania).

biblioteka smart-env

  • Implementacja autouzupełniania zmiennych środowiskowych w klasie ENV.
  • Obsługa operatora in w celu sprawdzenia istnienia zmiennej env.
  • Implementacja obsługi funkcji str() i repr() dla klasy ENV.

Terminy kolejnych wydań będą ogłaszane na bieżąco w następujących kanałach komunikacji:

Źródło: www.habr.com

Dodaj komentarz