Python és Bash barátság létrehozása: A python-shell és smart-env v könyvtárak kiadása. 1.0.1

Jó napot mindenkinek!

29 február 2020 év megtörtént a könyvtárak hivatalos mikrokiadása smart-env и python-shell. Aki nem ismeri, annak javaslom, hogy először olvassa el első poszt.

Röviden, a változtatások közé tartozik a parancsok befejezése, a parancsok futtatásának bővített lehetőségei, néhány átalakítás és hibajavítások.

A részletekért lásd a kat.

Mi az új a python-shellben?

Mindjárt a desszerttel kezdem.

A parancs teljesítése

Egyetértek – kényelmes, ha a szerkesztő/IDE/terminál bekéri a parancs nevét, és néha még a hívási paramétereket is? Tehát a python-shell fokozatosan halad a hasonló funkciók biztosítása terén. Tekintettel arra, hogy a Shell osztály motorháztető alatti mezői valójában nem a mezői (a mindenütt jelenlévő __getattr__), az automatikus kiegészítés is a semmiből jött létre (a __dir__ metódus túlterhelésével). Az automatikus kiegészítés jelenleg BPython és IPython környezetben működik. Természetesen szeretném látni az integrációt olyan tiszteletreméltó termékekkel, mint a PyCharm, és a megvalósítási lehetőségeket ez irányban tanulmányozzák.

Tulajdonságok hozzáadása

A kiadás részeként a Shell osztály új last_command tulajdonságot kapott. Erre azért volt szükség, mert amikor egy ShellException-t dobott egy nem nulla visszatérési kódú parancs, akkor a Command objektum nem került vissza a __call__() hívásból a parancsobjektumhoz. Most erre van lehetőség:

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

A Command objektum tulajdonságainak listája is bővült. Hozzáadott egy hibamezőt, amely visszaadja a parancs kimenetét a hibafolyamba.

Parancsok futtatása érvénytelen Python-nevekkel

Szinte minden rendszerben van legalább egy program, amelynek a neve nem alkalmas azonosítóként a Pythonban (például a jól ismert 2to3 segédprogram). Hívd fel vele

Shell.2to3()

Ha nem működik, a tolmács nem engedi át.
A megoldás a parancs körkörös meghívása:

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

Érdemes megjegyezni, hogy ugyanígy futtathatók az értelmező szempontjából érvényes parancsok, ami lehetőséget ad rugalmas szkriptek létrehozására, mint pl.

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

Kisebb változások

  • Megvalósult a Command osztály objektum __repr__() és __str__() metódusa, amelyek immár intuitív értékeket állítanak elő (egy parancs paraméterekkel és annak stdout kimenetével).
  • Kisebb kódjavítások.
  • Tesztlefedettség hozzáadása, valamint a meglévők átszervezése.
  • A Subprocess és Process osztályok hozzáadása, amelyek célja egy további absztrakciós szint létrehozása az alfolyamat modullal végzett munka során. Leginkább a kódduplikáció kiküszöbölésére van szükség a Python 2/3-mal való munka során, de más előnyökkel is járhat.

Mi az új smart-env?

A python-shell-lel ellentétben kevesebb változás történt a smart-env könyvtárban. Ennek egyszerű oka van - a szabadidő hiánya, amely során néhány lehetséges fejlesztés (például a környezeti változók automatikus kiegészítése) átkerült a következő kiadásba.

Valójában a következő változások történtek a könyvtárban:

  • Kisebb kódjavítások.
  • Refaktorálás.
  • A meglévő tesztek átszervezése és finomítása.

A következő kiadások tervei

python-shell könyvtár

  • Támogatás hozzáadása a nem blokkoló parancshívásokhoz (végrehajtás párhuzamosítása).

smart-env könyvtár

  • Környezeti változók automatikus kiegészítésének megvalósítása az ENV osztályban.
  • Az in operátor támogatása az env változó meglétének ellenőrzéséhez.
  • Az ENV osztály str() és repr() függvényeinek támogatásának megvalósítása.

A következő megjelenések időpontjait az alábbi kommunikációs csatornákon közöljük:

Forrás: will.com

Hozzászólás