Stvaranje prijateljstva Pythona i Basha: Izdanje biblioteka python-shell i smart-env v. 1.0.1

Dobar dan svima!

29 veljače 2020 godine održano je službeno mikroizdanje knjižnica pametno okruženje и python-ljuska. Za one koji ne znaju, predlažem da ga prvo pročitaju prvi post.

Ukratko, promjene uključuju dovršetak naredbi, proširene mogućnosti za izvođenje naredbi, neke refaktore i ispravke grešaka.

Za detalje pogledajte kat.

Što je novo u python-shell-u?

Odmah ću početi s desertom.

Završetak naredbe

Slažete se - zgodno je kada uređivač/IDE/terminal traži naziv naredbe, a ponekad čak i parametre poziva? Dakle, python-shell postupno napreduje u pružanju slične funkcionalnosti. Zbog činjenice da polja klase Shell ispod haube de facto nisu njezina polja (sveprisutni __getattr__), automatsko dovršavanje također je stvoreno od nule (preopterećenjem metode __dir__). Automatsko dovršavanje trenutno radi u okruženjima BPython i IPython. Naravno, volio bih vidjeti integraciju s uglednijim proizvodima poput PyCharma, a mogućnosti implementacije se proučavaju u tom smjeru.

Dodavanje svojstava

Kao dio izdanja, klasa Shell dobila je novo svojstvo last_command. Potreba za tim se pojavila jer kada je ShellException izbačena naredbom s povratnim kodom koji nije nula, objekt naredbe nije vraćen iz poziva __call__() objektu naredbe. Sada postoji prilika da to učinite:

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

Popis svojstava objekta Command također je proširen. Dodano je polje pogrešaka koje vraća izlaz naredbe u tok pogrešaka.

Pokretanje naredbi s nevažećim Python nazivima

Gotovo svaki sustav ima barem jedan program čije ime nije prikladno kao identifikator u Pythonu (na primjer, dobro poznati uslužni program 2to3). Nazovi je sa

Shell.2to3()

Ako ne radi, prevoditelj ga neće pustiti.
Rješenje je pozvati naredbu zaobilazno:

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

Vrijedno je napomenuti da na isti način možete pokretati naredbe koje su važeće sa stajališta tumača, što ostavlja mogućnost stvaranja fleksibilnih skripti poput

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

Manje izmjene

  • Implementirane su metode __repr__() i __str__() objekta klase Command, koje sada proizvode intuitivne vrijednosti (naredbu s parametrima i njezin stdout izlaz).
  • Manji popravci koda.
  • Dodavanje pokrivenosti testovima, kao i reorganizacija postojećih.
  • Dodavanje klasa Subprocess i Process, čija je svrha stvoriti dodatnu razinu apstrakcije pri radu s modulom subprocess. Uglavnom je potrebno za uklanjanje dupliciranja koda pri radu s Python 2/3, ali potencijalno može pružiti i druge bonuse.

Što je novo u smart-env?

Za razliku od python-shell-a, bilo je manje promjena u biblioteci smart-env. Razlog za to je jednostavan - nedostatak slobodnog vremena, tijekom kojeg su neka potencijalna poboljšanja (na primjer, automatsko dovršavanje varijabli okoline) premještena u sljedeće izdanje.

Zapravo, u knjižnici su napravljene sljedeće promjene:

  • Manji popravci koda.
  • Refactoring.
  • Reorganizacija i dorada postojećih testova.

Planovi za sljedeća izdanja

biblioteka python-shell

  • Dodavanje podrške za neblokirajuće pozive naredbi (paralelizacija izvršenja).

biblioteka smart-env

  • Implementacija automatskog dovršavanja varijabli okoline u klasi ENV.
  • Podrška za in operator za provjeru postojanja env varijable.
  • Implementacija podrške za funkcije str() i repr() za klasu ENV.

Datumi sljedećih izdanja bit će dodatno objavljeni putem sljedećih komunikacijskih kanala:

Izvor: www.habr.com

Dodajte komentar