Spojujeme Python a Bash: vydání knihoven python-shell a smart-env v. 1.0.1

Dobrý den všem!

29. února 2020 se konal oficiální mikro-release knihoven smart-env a python-shell. Těm, kteří nejsou v obraze, doporučuji nejprve přečíst první příspěvek.

Pokud to shrnu, mezi změnami je automatické doplňování příkazů, rozšíření možností spouštění příkazů, drobné refaktoringy a opravy chyb.

Pro detaily prosím pod cut.

Co nového v python-shell?

Začnu hned dezertem.

Doplňování příkazů

Souhlasíte, že je pohodlné, když editor/IDE/terminál naznačuje název příkazu a někdy i parametry volání? Python-shell se pomalu posouvá směrem k zajištění podobné funkčnosti. Vzhledem k tomu, že pole třídy Shell pod kapotou de-facto nejsou jejími poli (všeobecný __getattr__), bylo automatické doplňování vytvořeno také od nuly (přetížením metody __dir__). V současné době automatické doplňování funguje v prostředí BPython a IPython. Samozřejmě, že bych rád viděl integraci s robustnějšími produkty, jako je PyCharm, a v tomto směru se zkoumá možné realizace.

Přidání vlastností

V rámci release třída Shell získala novou vlastnost last_command. Potřeba této vlastnosti vznikla proto, že při generování výjimky ShellException příkazem s nenulovým návratovým kódem se objekt Command nevracel z volání __call__() objektu příkazu. Nyní je však možné udělat toto:

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

Také se rozšířil seznam vlastností objektu Command. Bylo přidáno pole errors, které vrací výstup příkazu do chybového proudu.

Spuštění příkazů s nevalidními jmény v Pythonu

V téměř každém systému existuje alespoň jeden program, jehož název není vhodný jako identifikátor v Pythonu (například známý nástroj 2to3). Spustit ho pomocí

Shell.2to3()

to nepůjde — interpretátor jej nepustí.
Řešení — zavolat příkaz obchvatem:

Shell("2to3")  # vrací objekt příkazu

Je třeba poznamenat, že stejným způsobem lze spouštět i validní příkazy z pohledu interpreteru, což ponechává možnost vytvářet flexibilní skripty, jako například

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

Drobné změny

  • Byly implementovány metody __repr__() a __str__() objektu třídy Command, které nyní vrací intuitivně pochopitelné hodnoty (příkaz s parametry a jeho stdout výstup).
  • Drobné opravy v kódu.
  • Přidání pokrytí testy a reorganizace stávajících.
  • Přidání tříd Subprocess a Process, jejichž cílem je vytvořit další úroveň abstrakce při práci s modulem subprocess. Většinou je to nutné k odstranění duplicitního kódu při práci s Pythonem 2/3, ale potenciálně může nabídnout i jiné výhody.

Co je nového v smart-env?

Na rozdíl od python-shell došlo v knihovně smart-env k menším změnám. Důvodem je prostý nedostatek volného času, což vedlo k tomu, že některá potenciální vylepšení (například automatické dokončování proměnných prostředí) byla přesunuta na další verzi.

Ve skutečnosti byla v knihovně provedena následující změny:

  • Drobné opravy v kódu.
  • Refaktoring.
  • Reorganizace a vylepšení stávajících testů.

Plány na další verze

Knihovna python-shell

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

Knihovna smart-env

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

O termínech dalších vydání bude dodatečně oznámeno v následujících komunikačních kanálech:

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster