Vytvoření přátelství Python a Bash: Vydání knihoven python-shell a smart-env v. 1.0.1

Dobrý den všem!

29 února 2020 rok proběhlo oficiální mikrovydání knihoven smart-env и python-shell. Pro ty, kteří to neznají, doporučuji si to nejprve přečíst první příspěvek.

Stručně řečeno, změny zahrnují dokončování příkazů, rozšířené možnosti spouštění příkazů, některé refaktory a opravy chyb.

Podrobnosti viz kat.

Co je nového v python-shell?

Začnu hned dezertem.

Dokončení příkazu

Souhlasíte - je to pohodlné, když vás editor/IDE/terminál vyzve k zadání názvu příkazu a někdy i parametrů volání? Takže python-shell postupně dělá pokroky v poskytování podobné funkce. Vzhledem k tomu, že pole třídy Shell pod kapotou de-facto nejsou jejími poli (všudypřítomný __getattr__), vzniklo také automatické doplňování od nuly (přetížením metody __dir__). Automatické dokončování aktuálně funguje v prostředích BPython a IPython. Samozřejmě bych rád viděl integraci s úctyhodnějšími produkty, jako je PyCharm, a v tomto směru se studují možnosti implementace.

Přidání vlastností

V rámci vydání získala třída Shell novou vlastnost last_command. Potřeba toho vznikla, protože když byla příkazem s nenulovým návratovým kódem vyvolána výjimka ShellException, z volání __call__() do objektu příkazu nebyl vrácen objekt Command. Nyní je příležitost to udělat:

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

Rozšířil se také seznam vlastností objektu Command. Přidáno pole chyb, které vrací výstup příkazu do proudu chyb.

Spouštění příkazů s neplatnými názvy Pythonu

Téměř každý systém má alespoň jeden program, jehož jméno není vhodné jako identifikátor v Pythonu (například známá utilita 2to3). Zavolej jí s

Shell.2to3()

Pokud to nefunguje, tlumočník to nepustí.
Řešením je zavolat příkaz kruhovým objezdem:

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

Stojí za zmínku, že stejným způsobem můžete spouštět příkazy, které jsou platné z pohledu interpreta, což ponechává možnost vytvářet flexibilní skripty jako

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

Malé změny

  • Byly implementovány metody __repr__() a __str__() objektu třídy Command, které nyní produkují intuitivní hodnoty (příkaz s parametry a jeho výstup stdout).
  • Drobné opravy kódu.
  • Přidání testovacího pokrytí a také reorganizace stávajících.
  • Přidání tříd Subprocess a Process, jejichž účelem je vytvořit další úroveň abstrakce při práci s modulem subprocess. Většinou je potřeba k odstranění duplikace kódu při práci s Pythonem 2/3, ale může potenciálně poskytovat i další bonusy.

Co je nového ve smart-env?

Na rozdíl od python-shell bylo v knihovně smart-env méně změn. Důvod je jednoduchý – nedostatek volného času, během kterého byla některá potenciální vylepšení (například automatické doplňování proměnných prostředí) přesunuta do dalšího vydání.

Ve skutečnosti byly v knihovně provedeny následující změny:

  • Drobné opravy kódu.
  • Refaktoring.
  • Reorganizace a zpřesnění stávajících testů.

Plány na další vydání

python-shell knihovna

  • Přidání podpory pro neblokující volání příkazů (paralelizace provádění).

knihovna smart-env

  • Implementace automatického doplňování proměnných prostředí ve třídě ENV.
  • Podpora operátoru in pro kontrolu existence proměnné env.
  • Implementace podpory funkcí str() a repr() pro třídu ENV.

Data dalších vydání budou dále oznámena v následujících komunikačních kanálech:

Zdroj: www.habr.com

Přidat komentář