Crearea prieteniei Python și Bash: Lansarea bibliotecilor python-shell și smart-env v. 1.0.1

Ziua bună tuturor!

29 luna februarie a anului 2020 a avut loc micro-lansarea oficială a bibliotecilor smart-env и python-shell. Pentru cei care nu sunt la curent, vă sugerez să îl citiți mai întâi prima postare.

Pe scurt, modificările includ finalizarea comenzilor, capabilități extinse pentru rularea comenzilor, unele refactorizări și remedieri de erori.

Pentru detalii, consultați cat.

Ce este nou în python-shell?

Voi începe imediat cu desertul.

Finalizarea comenzii

De acord - este convenabil când editorul/IDE/terminalul vă solicită numele comenzii și, uneori, chiar și parametrii de apel? Deci, python-shell face progrese treptat în furnizarea de funcționalități similare. Datorită faptului că câmpurile clasei Shell de sub capotă sunt de facto, nu câmpurile sale (omniprezentul __getattr__), autocompletarea a fost creată și de la zero (prin supraîncărcarea metodei __dir__, respectiv). În prezent, completarea automată funcționează în mediile BPython și IPython. Desigur, aș dori să văd integrarea cu produse mai venerabile precum PyCharm, iar posibilitățile de implementare sunt studiate în această direcție.

Adăugarea proprietăților

Ca parte a lansării, clasa Shell a primit o nouă proprietate last_command. Necesitatea a apărut deoarece atunci când o ShellException a fost lansată de o comandă cu un cod de returnare diferit de zero, obiectul Command nu a fost returnat de la apelul __call__() către obiectul de comandă. Acum există o oportunitate de a face acest lucru:

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

S-a extins și lista de proprietăți ale obiectului Command. S-a adăugat un câmp de erori care returnează rezultatul comenzii în fluxul de erori.

Rularea comenzilor cu nume Python nevalide

Aproape fiecare sistem are cel puțin un program al cărui nume nu este potrivit ca identificator în Python (de exemplu, binecunoscutul utilitar 2to3). Sună-o cu

Shell.2to3()

Dacă nu funcționează, interpretul nu o va lăsa să treacă.
Soluția este să apelați comanda într-un mod obișnuit:

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

Este de remarcat faptul că, în același mod, puteți rula comenzi care sunt valabile din punctul de vedere al interpretului, ceea ce lasă posibilitatea de a crea scripturi flexibile precum

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

Modificări minore

  • Au fost implementate metodele __repr__() și __str__() ale obiectului clasei Command, care produc acum valori intuitive (o comandă cu parametri și, respectiv, ieșirea sa stdout).
  • Remedieri minore de cod.
  • Adăugarea acoperirii testelor, precum și reorganizarea celor existente.
  • Adăugarea claselor Subprocess și Process, al căror scop este de a crea un nivel suplimentar de abstractizare atunci când lucrați cu modulul subproces. În mare parte, este necesar pentru a elimina duplicarea codului atunci când lucrați cu Python 2/3, dar poate oferi și alte bonusuri.

Ce este nou în smart-env?

Spre deosebire de python-shell, au existat mai puține modificări în biblioteca smart-env. Motivul pentru aceasta este simplu - lipsa timpului liber, timp în care unele îmbunătățiri potențiale (de exemplu, completarea automată a variabilelor de mediu) au fost mutate la următoarea ediție.

De fapt, în bibliotecă au fost făcute următoarele modificări:

  • Remedieri minore de cod.
  • Refactorizarea.
  • Reorganizarea și perfecţionarea testelor existente.

Planuri pentru următoarele lansări

biblioteca python-shell

  • Adăugarea suportului pentru apelurile de comandă neblocante (paralelizarea execuției).

biblioteca smart-env

  • Implementarea autocompletarii variabilelor de mediu in clasa ENV.
  • Suport pentru operatorul in pentru a verifica existența unei variabile env.
  • Implementarea suportului pentru funcțiile str() și repr() pentru clasa ENV.

Datele următoarelor lansări vor fi anunțate în continuare pe următoarele canale de comunicare:

Sursa: www.habr.com

Adauga un comentariu