Python- ja Bash-ystävyyden luominen: Python-shell- ja smart-env v -kirjastojen julkaisu. 1.0.1

Hyvää päivää kaikille!

Helmikuu 29 2020 vuotta kirjastojen virallinen mikrojulkaisu tapahtui smart-env и python-kuori. Niille, jotka eivät tiedä, suosittelen lukemaan sen ensin ensimmäinen postaus.

Lyhyesti sanottuna muutokset sisältävät komentojen suorittamisen, laajennetut ominaisuudet komentojen suorittamiseen, joitain uudelleenjärjestelyjä ja virheenkorjauksia.

Katso lisätietoja kohdasta cat.

Mitä uutta python-shellissä?

Aloitan heti jälkiruoalla.

Komennon suorittaminen

Olen samaa mieltä - onko kätevää, kun editori/IDE/pääte pyytää sinua antamaan komennon nimen ja joskus jopa kutsuparametreja? Joten python-shell edistyy vähitellen samanlaisten toimintojen tarjoamisessa. Koska Shell-luokan kentät konepellin alla eivät ole tosiasiallisesti sen kenttiä (yleinen __getattr__), myös automaattinen täydennys luotiin tyhjästä (ylikuormittamalla __dir__-metodia, vastaavasti). Automaattinen täydennys toimii tällä hetkellä BPython- ja IPython-ympäristöissä. Tietysti haluaisin integraation arvostetumpiin tuotteisiin, kuten PyCharm, ja toteutusmahdollisuuksia tutkitaan tähän suuntaan.

Ominaisuuksien lisääminen

Osana julkaisua Shell-luokka sai uuden last_command-ominaisuuden. Tarve sille syntyi, koska kun ShellException heitettiin komennolla, jonka paluukoodi ei ole nolla, Command-objektia ei palautettu __call__() -kutsusta komentoobjektille. Nyt on mahdollisuus tehdä tämä:

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

Myös Command-objektin ominaisuuksien luettelo on laajentunut. Lisätty virhekenttä, joka palauttaa komennon lähdön virhevirtaan.

Suoritetaan komentoja virheellisillä Python-nimillä

Lähes jokaisessa järjestelmässä on ainakin yksi ohjelma, jonka nimi ei sovellu tunnisteeksi Pythonissa (esimerkiksi tuttu 2to3-apuohjelma). Soita hänelle

Shell.2to3()

Jos se ei toimi, tulkki ei päästä sitä läpi.
Ratkaisu on kutsua komento kiertoradalla:

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

On syytä huomata, että samalla tavalla voidaan suorittaa tulkin kannalta kelvollisia komentoja, mikä jättää mahdollisuuden luoda joustavia skriptejä, kuten

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

Pienet muutokset

  • Command-luokan objektin menetelmät __repr__() ja __str__() on toteutettu, jotka tuottavat nyt intuitiivisia arvoja (parametreilla varustettu komento ja sen stdout-ulostulo).
  • Pienet koodikorjaukset.
  • Testin kattavuuden lisääminen sekä olemassa olevien uudelleenjärjestely.
  • Lisätään Subprocess- ja Process-luokat, joiden tarkoituksena on luoda ylimääräinen abstraktiotaso työskennellessäsi aliprosessimoduulin kanssa. Enimmäkseen tarvitaan koodin päällekkäisyyden poistamiseen käytettäessä Python 2/3:a, mutta se voi tarjota myös muita bonuksia.

Mitä uutta smart-envissä?

Toisin kuin python-shell, smart-env-kirjastossa on ollut vähemmän muutoksia. Syy tähän on yksinkertainen - vapaa-ajan puute, jonka aikana joitain mahdollisia parannuksia (esim. ympäristömuuttujien automaattinen täydennys) siirrettiin seuraavaan julkaisuun.

Itse asiassa kirjastoon on tehty seuraavat muutokset:

  • Pienet koodikorjaukset.
  • Refaktorointi.
  • Nykyisten testien uudelleenjärjestely ja jalostaminen.

Suunnitelmat seuraaville julkaisuille

python-shell -kirjasto

  • Tuen lisääminen ei-estäville komentokutsuille (suorituksen rinnakkain).

smart-env-kirjasto

  • Ympäristömuuttujien automaattisen täydennyksen toteutus ENV-luokassa.
  • Tuki in-operaattorille env-muuttujan olemassaolon tarkistamiseksi.
  • Str()- ja repr()-funktioiden tuen toteutus ENV-luokassa.

Seuraavien julkaisujen päivämäärät tiedotetaan tarkemmin seuraavilla viestintäkanavilla:

Lähde: will.com

Lisää kommentti