Vytváranie priateľstva 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 rok prebehlo oficiálne mikrovydanie knižníc smart-env и python-shell. Pre tých, ktorí to nevedia, odporúčam, aby ste si to najskôr prečítali prvý príspevok.

Stručne povedané, zmeny zahŕňajú dokončenie príkazov, rozšírené možnosti spúšťania príkazov, niektoré zmeny a opravy chýb.

Podrobnosti nájdete v kat.

Čo je nové v python-shell?

Začnem hneď dezertom.

Dokončenie príkazu

Súhlasíte - je vhodné, keď vás editor/IDE/terminál vyzve na zadanie názvu príkazu a niekedy aj parametrov volania? Takže python-shell postupne napreduje v poskytovaní podobnej funkcionality. Vzhľadom na to, že polia triedy Shell pod kapotou de-facto nie sú jej poliami (všadeprítomné __getattr__), bolo od základu vytvorené aj automatické dopĺňanie (preťažením metódy __dir__). Automatické dokončovanie momentálne funguje v prostrediach BPython a IPython. Samozrejme, rád by som videl integráciu s úctyhodnejšími produktmi, ako je PyCharm, a v tomto smere sa skúmajú možnosti implementácie.

Pridávanie vlastností

V rámci vydania dostala trieda Shell novú vlastnosť last_command. Potreba toho vznikla, pretože keď bola príkazom s nenulovým návratovým kódom vyvolaná výnimka ShellException, objekt Command sa nevrátil z volania __call__() do objektu príkazu. Teraz je príležitosť urobiť to:

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

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

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

Takmer každý systém má aspoň jeden program, ktorého názov nie je vhodný ako identifikátor v Pythone (napríklad známa utilita 2to3). Zavolajte jej s

Shell.2to3()

Ak to nefunguje, tlmočník to nepustí.
Riešením je zavolať príkaz kruhovým objazdom:

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

Stojí za zmienku, že rovnakým spôsobom môžete spúšťať príkazy, ktoré sú platné z pohľadu interpreta, čo ponecháva možnosť vytvárať flexibilné skripty ako napr.

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

Malé zmeny

  • Boli implementované metódy __repr__() a __str__() objektu triedy Command, ktoré teraz vytvárajú intuitívne hodnoty (príkaz s parametrami a jeho výstup stdout).
  • Drobné opravy kódu.
  • Pridanie testovacieho pokrytia, ako aj reorganizácia existujúcich.
  • Pridanie tried Subprocess a Process, ktorých účelom je vytvorenie ďalšej úrovne abstrakcie pri práci s modulom subprocess. Väčšinou je potrebný na odstránenie duplicity kódu pri práci s Pythonom 2/3, ale môže potenciálne poskytnúť aj ďalšie bonusy.

Čo je nové v smart-env?

Na rozdiel od python-shell bolo v knižnici smart-env menej zmien. Dôvod je jednoduchý – nedostatok voľného času, počas ktorého sa niektoré potenciálne vylepšenia (napríklad automatické dopĺňanie premenných prostredia) presunuli do ďalšieho vydania.

V knižnici boli vykonané tieto zmeny:

  • Drobné opravy kódu.
  • Refaktorovanie.
  • Reorganizácia a spresnenie existujúcich testov.

Plány na ďalšie vydania

knižnica python-shell

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

knižnica smart-env

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

Dátumy ďalších vydaní budú ďalej oznámené prostredníctvom nasledujúcich komunikačných kanálov:

Zdroj: hab.com

Pridať komentár