Integrăm Python și Bash: lansarea bibliotecilor python-shell și smart-env v. 1.0.1

Bună tuturor!

29 februarie 2020 a avut loc lansarea oficială a bibliotecilor smart-env și python-shell. Pentru cei care nu sunt la curent, propun să citiți mai întâi prima postare.

Pe scurt, printre schimbări se numără completarea automată a comenzilor, extinderea capacităților de execuție a comenzilor, puțin refactoring și remedieri de erori.

Pentru detalii, vă rog să continuați citirea mai jos.

Ce este nou în python-shell?

Voi începe direct cu desertul.

Completarea automată a comenzilor

Sunteți de acord că este convenabil atunci când editorul/IDE/terminalul sugerează numele comenzii și uneori chiar și parametrii apelului? Așa că python-shell progresează treptat în asigurarea acestui tip de funcționalitate. Întrucât câmpurile clasei Shell, de fapt, nu sunt sub câteva aspecte câmpurile sale (tot soiul de __getattr__), completarea automată a fost creată de la zero (prin suprascrierea, în consecință, a metodei __dir__). În acest moment, completarea automată funcționează în mediile BPython și IPython. Desigur, ne dorim să vedem integrarea cu produse mai consacrate precum PyCharm, iar în această direcție se studiază posibilitățile de implementare.

Adăugarea proprietăților

În cadrul lansării, clasa Shell a primit o nouă proprietate last_command. Nevoia de a o avea a apărut din cauza faptului că, atunci când se generează o excepție ShellException cu o comandă ce returna un cod non-zero, obiectul Command nu era returnat din apelul __call__() al obiectului comenzii. Acum este posibil să procedați astfel:

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

De asemenea, lista proprietăților obiectului Command s-a extins. A fost adăugat câmpul errors, care returnează ieșirea comenzii în fluxul de erori.

Executarea comenzilor cu nume invalide în Python

Practic, în orice sistem există măcar un program a cărui denumire nu se potrivește ca identificator în Python (de exemplu, celebra utilitate 2to3). A apela la ea folosind

Shell.2to3()

nu va funcționa - interpretatorul nu o va permite.
Soluția este de a apela comanda printr-o metodă alternativă:

Shell("2to3")  # returnează obiectul comenzii

Merită menționat că în același mod se pot lansa și comenzi valide din punctul de vedere al interpretatorului, ceea ce păstrează posibilitatea de a crea scripturi flexibile precum

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

Schimbări minore

  • Au fost implementate metodele __repr__() și __str__() ale clasei Command, care acum returnează valori intuitive (comanda cu parametrii și ieșirea stdout corespunzătoare).
  • Corecturi minore în cod.
  • Adăugarea unei acoperiri de teste, precum și reorganizarea celor existente.
  • Adăugarea claselor Subprocess și Process, cu scopul de a crea un nivel suplimentar de abstractizare în lucrul cu modulul subprocess. În principal, este necesar pentru eliminarea repetărilor în cod atunci când se lucrează cu Python 2/3, dar poate aduce și alte beneficii.

Ce este nou în smart-env?

Spre deosebire de python-shell, biblioteca smart-env a suferit mai puține modificări. Motivul este simplu — lipsa timpului liber, permițând astfel ca unele îmbunătăți semnificative (cum ar fi autocompletarea variabilelor de mediu) să fie amânate pentru următoarea versiune.

În fapt, biblioteca a adus următoarele modificări:

  • Corecturi minore în cod.
  • Refactorizare.
  • Reorganizarea și îmbunătățirea testelor existente.

Planuri pentru următoarele versiuni

Biblioteca python-shell

  • Adăugarea suportului pentru apeluri de comenzi non-blocante (paralelizarea execuției).

Biblioteca smart-env

  • Implementarea autocompletării variabilelor de mediu în clasa ENV.
  • Suport pentru operatorul in pentru verificarea existenței unei variabile de mediu.
  • Implementarea suportului pentru funcțiile str() și repr() pentru clasa ENV.

Informații despre datele următoarelor versiuni vor fi anunțate suplimentar prin canalele de comunicare:

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster