Spojujeme Python a Bash: vydanie knižníc python-shell a smart-env v. 1.0.1

Dobrý deň všetkým!

29. februára 2020 sa uskutočnila oficiálna mikro-verzia knižníc smart-env a python-shell. Tým, ktorí nie sú v obraze, navrhujem najprv si prečítať prvý príspevok.

Ak to zhrniem, medzi zmenami sú – automatické doplňovanie príkazov, rozšírené možnosti spustenia príkazov, trochu refaktoringu a opráv chýb.

Pre podrobnosti prosím pokračujte ďalej.

Čo je nové v python-shell?

Začnem hneď s dezertom.

Automatické doplňovanie príkazov

Súhlasíte, že je pohodlné, keď editor/IDE/terminál navrhne názov príkazu, a niekedy aj parametre volania? Tak aj python-shell sa pomaly posúva v zabezpečení podobnej funkčnosti. Vzhľadom k tomu, že polia triedy Shell pod kapotou de-facto nie sú jeho poliami (všadeprítomný __getattr__), automatické doplňovanie bolo vytvorené tiež od nuly (preťažovaním, príslušne, metódy __dir__). V súčasnosti automatické doplňovanie funguje v prostredí BPython a IPython. Samozrejme, chceli by sme vidieť integráciu s prestížnejšími produktmi ako PyCharm, a v tomto smere prebieha štúdium možností realizácie.

Pridanie vlastností

V rámci vydania získala trieda Shell novú vlastnosť last_command. Potreba tejto vlastnosti vznikla z dôvodu, že pri generovaní výnimky ShellException príkazom s nenulovým kódom návratu sa objekt Command nevrátil z volania __call__() objektu príkazu. Teraz je však možné spraviť nasledovné:

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

Rovnako sa rozšíril zoznam vlastností objektu Command. Pridané pole errors, ktoré vracia výstup príkazu do chybového prúdu.

Spúšťanie príkazov s Python-neplatnými názvami

Takmer v každom systéme existuje aspoň jeden program, ktorého názov nie je vhodný ako identifikátor v Pythone (napríklad známa utilita 2to3). Vyvolať ho pomocou

Shell.2to3()

sa nepodarí – interpret to neprepustí.
Riešenie – vyvolať príkaz obchádzajúco:

Shell("2to3")  # vracia objekt príkazu

Je dobré poznamenať, že rovnakým spôsobom je možné spúšťať aj platné príkazy z pohľadu interpretu, čo ponecháva možnosť vytvárať flexibilné skripty ako

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

Malé zmeny

  • Bola implementovaná metóda __repr__() a __str__() objektu triedy Command, ktoré teraz vydávajú intuitívne pochopiteľné hodnoty (príkaz s parametrami a jeho stdout výstup).
  • Malé opravy v kóde.
  • Pridanie pokrytia testami a reorganizácia existujúcich.
  • Pridanie tried Subprocess a Process, ktorých cieľom je vytvorenie dodatočnej úrovne abstrakcie pri práci s modulom subprocess. Väčšinou to je potrebné na odstránenie opakovaní kódu pri práci s Python 2/3, ale potenciálne to môže priniesť aj ďalšie výhody.

Čo je nového v smart-env?

Na rozdiel od python-shell, v knižnici smart-env sa udialo menej zmien. Dôvod je jednoduchý — nedostatok voľného času, počas ktorého niektoré potenciálne zlepšenia (napríklad automatické doplňovanie premenných prostredia) boli presunuté na ďalší release.

V skutočnosti boli v knižnici vykonané nasledujúce zmeny:

  • Malé opravy v kóde.
  • Refaktorovanie.
  • Reorganizácia a úprava existujúcich testov.

Plány na ďalšie release

Knižnica python-shell

  • Pridanie podpory pre neblokujúce volania príkazov (paralelizácia vykonávania).

Knižnica smart-env

  • Implementácia automatického doplňovania premenných prostredia v triede ENV.
  • Podpora operátora in na kontrolu existencie env-pola.
  • Implementácia podpory funkcií str() a repr() pre triedu ENV.

O termínoch budúcich release bude oznámené v nasledujúcich komunikačných kanáloch:

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster