Sdrudzhivayem Python i Bash: reliz biblioteka python-shell i smart-env v. 1.0.1

Dober dan vsem!

29. februar 2020 se je odvijal uradni mikro-izdaja knjižnic smart-env in python-shell. Tistim, ki niste v toku, predlagam, da preberete prvi članek.

Na kratko, med spremembami so avtomatsko dopolnjevanje ukazov, širitev možnosti za izvajanje ukazov, nekoliko refaktorizacije in odpravljanja napak.

Za podrobnosti vas prosim pod kat.

Kaj novega pri python-shell?

Začel bom takoj s sladico.

Samodejno dopolnjevanje ukazov

Se strinjate — priročno je, ko urejevalnik / IDE / terminal predlaga ime ukaza, včasih pa tudi parametre klica? Tako se python-shell postopoma razvija v zagotavljanju tovrstne funkcionalnosti. Glede na to, da polja razreda Shell pod pokrovom de-facto niso njegova polja (vseprisotni __getattr__), je bilo avtomatsko dopolnjevanje ustvarjeno tudi z ničle (s preobremenitvijo, ustrezno, metode __dir__). Trenutno avtomatsko dopolnjevanje deluje v okoljih BPython in IPython. Seveda si želimo videti integracijo z bolj prepoznavnimi izdelki, kot je PyCharm, in v tej smeri poteka raziskovanje možnosti izvedbe.

Dodajanje lastnosti

V okviru izdaje je razred Shell prejel novo lastnost last_command. Potreba po njej je nastala, ker ob generiranju izjeme ShellException z ukazom, ki ima nenulte kode vrnitve, objekt Command ni bil vrnjen iz klica __call__() objekta ukaza. Zdaj pa je mogoče narediti tako:

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

Poleg tega se je razširil seznam lastnosti objekta Command. Dodano je polje errors, ki vrne izhod ukaza v tok napak.

Zagnanje ukazov s Python-invalidnimi imeni

V praktično vsakem sistemu je vsaj en program, katerega ime ni primerno kot identifikator v Pythonu (na primer, znana pripomoček 2to3). Kličejo ga lahko z

Shell.2to3()

ne bo delovalo — interpreter ne bo omogočil.
Rešitev je, da ukaz pokličemo poobhodno:

Shell("2to3")  # vrne objekt ukaza

Opaziti je treba, da lahko na ta način zaženete tudi veljavne ukaze z vidika interpreterja, kar omogoča izdelavo fleksibilnih skript, kot je

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

Majhne spremembe

  • Izvedene so bile metode __repr__() in __str__() objekta razreda Command, ki sedaj vračata intuitivno razumljive vrednosti (ukaz s parametri in njegova stdout-izhodna vrednost).
  • Majhni popravki kode.
  • Dodajanje pokritja s testi ter reorganizacija obstoječih.
  • Dodajanje razredov Subprocess in Process, katerih cilj je ustvariti dodatno plast abstrakcije pri delu z modulom subprocess. V večini primerov je potrebno za odpravo ponavljanja kode pri delu s Python 2/3, lahko pa prinese tudi druge koristi.

Kaj je novega v smart-env?

V nasprotju s python-shell se v knjižnici smart-env ni zgodilo veliko sprememb. Razlog je preprost — pomanjkanje prostega časa, zaradi česar so nekatere potencialne izboljšave (na primer samodejno dopolnjevanje okolijskih spremenljivk) preložene na naslednjo različico.

Dejansko so v knjižnici izvedene naslednje spremembe:

  • Majhni popravki kode.
  • Refaktorizacija.
  • Reorganizacija in dopolnitev obstoječih testov.

Načrti za naslednje različice

Knjižnica python-shell

  • Dodajanje podpore za neblokirne klice ukazov (paralelizacija izvajanja).

Knjižnica smart-env

  • Izvedba samodejnega dopolnjevanja okolijskih spremenljivk v razredu ENV.
  • Podpora operatorju in za preverjanje obstoja env-spremenljivke.
  • Izvedba podpore za funkcije str() in repr() za razred ENV.

O datumih naslednjih različic bo dodatno obveščeno preko naslednjih komunikacijskih kanalov:

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster