Vzpostavljanje prijateljstva med Pythonom in Bashom: Izdaja knjižnic python-shell in smart-env v. 1.0.1

Dober dan vsem!

Februar 29 2020 let uradna mikro izdaja knjižnic smart-env и python-shell. Tisti, ki se ne spoznate, predlagam, da si ga najprej preberete prva objava.

Skratka, spremembe vključujejo dokončanje ukazov, razširjene zmogljivosti za izvajanje ukazov, nekaj refaktoriranja in popravke napak.

Za podrobnosti glejte kat.

Kaj je novega v lupini python?

Takoj začnem s sladico.

Zaključek ukaza

Se strinjate - priročno je, ko vas urejevalnik/IDE/terminal pozove k imenu ukaza in včasih celo k klicnim parametrom? Python-shell torej postopoma napreduje pri zagotavljanju podobne funkcionalnosti. Zaradi dejstva, da polja razreda Shell pod pokrovom de facto niso njegova polja (vseprisotni __getattr__), je bilo tudi samodejno dokončanje ustvarjeno iz nič (s preobremenitvijo metode __dir__). Samodokončanje trenutno deluje v okoljih BPython in IPython. Seveda bi si želel integracije z bolj častitljivimi izdelki, kot je PyCharm, in v tej smeri se preučujejo možnosti implementacije.

Dodajanje lastnosti

Kot del izdaje je razred Shell prejel novo lastnost last_command. Potreba po njem se je pojavila, ker ko je ukaz ShellException vrgel ukaz z neničelno povratno kodo, objekt Command ni bil vrnjen iz klica __call__() v ukazni objekt. Zdaj obstaja priložnost, da to storite:

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

Razširjen je tudi seznam lastnosti objekta Command. Dodano polje z napakami, ki vrne izhod ukaza v tok napak.

Izvajanje ukazov z neveljavnimi imeni Python

Skoraj vsak sistem ima vsaj en program, katerega ime ni primerno kot identifikator v Pythonu (na primer dobro znani pripomoček 2to3). Pokliči jo z

Shell.2to3()

Če ne deluje, ga tolmač ne spusti skozi.
Rešitev je, da pokličete ukaz na krožni način:

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

Omeniti velja, da lahko na enak način izvajate ukaze, ki so veljavni z vidika tolmača, kar pušča možnost ustvarjanja prilagodljivih skriptov, kot je

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

Manjše spremembe

  • Implementirani sta bili metodi __repr__() in __str__() predmeta razreda Command, ki zdaj proizvajata intuitivne vrednosti (ukaz s parametri oziroma njegov izhod stdout).
  • Manjši popravki kode.
  • Dodajanje testne pokritosti in reorganizacija obstoječih.
  • Dodajanje razredov Subprocess in Process, katerih namen je ustvariti dodatno raven abstrakcije pri delu z modulom subprocess. Večinoma je potreben za odpravo podvajanja kode pri delu s Python 2/3, vendar lahko potencialno zagotovi tudi druge bonuse.

Kaj je novega v smart-env?

Za razliko od python-shell je bilo v knjižnici smart-env manj sprememb. Razlog za to je preprost - pomanjkanje prostega časa, med katerim so bile nekatere potencialne izboljšave (na primer samodokončanje spremenljivk okolja) prestavljene v naslednjo izdajo.

Pravzaprav so bile v knjižnici narejene naslednje spremembe:

  • Manjši popravki kode.
  • Refactoring.
  • Reorganizacija in izboljšava obstoječih testov.

Načrti za naslednje izdaje

knjižnica python-shell

  • Dodajanje podpore za klice ukazov brez blokiranja (paralelizacija izvajanja).

knjižnica smart-env

  • Implementacija samodokončanja spremenljivk okolja v razredu ENV.
  • Podpora za operator in za preverjanje obstoja spremenljivke env.
  • Implementacija podpore za funkciji str() in repr() za razred ENV.

Datumi naslednjih objav bodo dodatno objavljeni v naslednjih komunikacijskih kanalih:

Vir: www.habr.com

Dodaj komentar