„Python“ ir „Bash“ draugystė: „Python-shell“ ir „smart-env v“ bibliotekų išleidimas. 1.0.1

Laba diena visiems!

29 Vasaris 2020 metų įvyko oficialus bibliotekų mikroleidimas smart-env и python apvalkalas. Tiems, kurie nieko nežino, siūlau pirmiausia perskaityti pirmas postas.

Trumpai tariant, pakeitimai apima komandų užbaigimą, išplėstas komandų vykdymo galimybes, kai kuriuos pertvarkymus ir klaidų taisymus.

Daugiau informacijos rasite kat.

Kas naujo python-shell?

Tuoj pradėsiu nuo deserto.

Komandos įvykdymas

Sutinku – patogu, kai redaktorius/IDE/terminalas paragina įvesti komandos pavadinimą, o kartais net ir skambučio parametrus? Taigi python-shell pamažu daro pažangą teikdamas panašias funkcijas. Dėl to, kad Shell klasės laukai po gaubtu yra de facto, o ne jo laukai (visur esantys __getattr__), automatinis užbaigimas taip pat buvo sukurtas nuo nulio (atitinkamai perkraunant __dir__ metodą). Šiuo metu automatinis užbaigimas veikia BPython ir IPython aplinkose. Žinoma, norėčiau matyti integraciją su garbingesniais produktais, tokiais kaip PyCharm, o diegimo galimybės yra tiriamos šia kryptimi.

Savybių pridėjimas

Išleidimo metu „Shell“ klasė gavo naują „last_command“ ypatybę. Jo poreikis atsirado dėl to, kad kai „ShellException“ buvo išmestas komandai su ne nuliu grąžinimo kodu, komandos objektas nebuvo grąžintas iš __call__() iškvietimo į komandos objektą. Dabar yra galimybė tai padaryti:

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

Taip pat išsiplėtė Command objekto savybių sąrašas. Pridėtas klaidų laukas, kuris grąžina komandos išvestį į klaidų srautą.

Vykdomos komandos su netinkamais Python pavadinimais

Beveik kiekviena sistema turi bent vieną programą, kurios pavadinimas netinka kaip identifikatorius Python (pavyzdžiui, gerai žinoma 2to3 programa). Paskambink jai su

Shell.2to3()

Jei tai neveikia, vertėjas to nepraleis.
Sprendimas yra iškviesti komandą žiedine sankryža:

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

Verta pažymėti, kad tokiu pat būdu galite paleisti komandas, kurios galioja interpretatoriaus požiūriu, o tai palieka galimybę kurti lanksčius scenarijus, pvz.

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

Smulkūs pakeitimai

  • Buvo įdiegti Command klasės objekto metodai __repr__() ir __str__(), kurie dabar sukuria intuityvias reikšmes (atitinkamai komanda su parametrais ir jos stdout išvestimi).
  • Nedideli kodo pataisymai.
  • Testo aprėpties pridėjimas, taip pat esamų pertvarkymas.
  • Pridedamas Subprocess ir Process klases, kurių tikslas – sukurti papildomą abstrakcijos lygį dirbant su subprocesų moduliu. Dažniausiai reikia norint pašalinti kodo dubliavimą dirbant su Python 2/3, tačiau gali būti ir kitų priedų.

Kas naujo išmaniajame env?

Skirtingai nuo python-shell, smart-env bibliotekoje buvo mažiau pakeitimų. To priežastis paprasta – trūksta laisvo laiko, kurio metu kai kurie galimi patobulinimai (pavyzdžiui, aplinkos kintamųjų automatinis užbaigimas) buvo perkelti į kitą leidimą.

Tiesą sakant, bibliotekoje buvo atlikti šie pakeitimai:

  • Nedideli kodo pataisymai.
  • Refaktoringas.
  • Esamų bandymų pertvarkymas ir tobulinimas.

Kitų leidimų planai

Python-shell biblioteka

  • Neblokuojančių komandų iškvietimų palaikymo pridėjimas (vykdymo lygiagretus).

smart-env biblioteka

  • Aplinkos kintamųjų automatinio užbaigimo ENV klasėje įgyvendinimas.
  • Operatoriaus in palaikymas, norint patikrinti, ar yra env kintamasis.
  • ENV klasės funkcijų str() ir repr() palaikymo įdiegimas.

Kitų leidimų datos bus toliau skelbiamos šiais komunikacijos kanalais:

Šaltinis: www.habr.com

Добавить комментарий