Python és Bash összekapcsolása: a python-shell és a smart-env v. 1.0.1 könyvtárak megjelenése

Jó napot kívánok mindenkinek!

2020. február 29-én történt a hivatalos mikro-kiadás a könyvtárakról smart-env és python-shell. Akik nem tudják, javaslom, hogy előzetesen olvassák el a első posztot.

Röviden, a változások között van a parancsok autocompletálása, a parancsok futtatásának lehetőségeinek bővítése, némi refaktorálás és hibajavítások.

Részletekért kérem, kattintson tovább.

Mi újság a python-shellben?

Rögtön a desszerttel kezdem.

Parancsok automatikus kiegészítése

Egyetértenek - kényelmes, amikor a szerkesztő/IDE/terminál javasolja a parancs nevét, és néha még a hívási paramétereket is? Így a python-shell is fokozatosan előrehalad az ilyen funkciók biztosításában. Mivel a Shell osztály mezői a háttérben de facto nem az ő mezői (a mindenütt jelen lévő __getattr__), az autocompletálás is a nulláról készült (az __dir__ metódus túlterhelésével). Jelenleg az autocompletálás a BPython és az IPython környezetekben működik. Természetesen jó lenne látni az integrációt nevesebb termékekkel, mint a PyCharm, és ebben az irányban megkezdődött a megvalósítás lehetőségeinek vizsgálata.

Tulajdonságok hozzáadása

A kiadás keretében a Shell osztály új last_command tulajdonságot kapott. Ennek szükségessége abból adódott, hogy ShellException kivétel generálásakor a nem nulla visszatérési kódú parancs objektum nem tért vissza az __call__() parancs objektum hívása során. Most viszont lehetőség van arra, hogy:

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

A Command objektum tulajdonságainak listája is bővült. Hozzáadódott az errors mező, amely visszaadja a parancs kimenetét a hibafolyamba.

Parancsok futtatása Python által érvénytelen nevekkel

Gyakorlatilag bármely rendszerben van legalább egy program, amelynek neve nem megfelelő Python azonosítónak (például a jól ismert 2to3 segédprogram). Ezt a következő módon hívhatjuk meg:

Shell.2to3()

nem lehetséges - az interpreter nem engedi.
A megoldás – a parancs kikerülő úton történő meghívása:

Shell("2to3")  # visszaadja a parancs objektumot

Megjegyzendő, hogy ugyanígy érvényes parancsokat is indíthatunk az interpreter szempontjából, ami lehetővé teszi rugalmas szkriptek létrehozását, mint például

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

Kisebb változások

  • A Command osztály objektumánál megvalósult a __repr__() és __str__() metódus, amelyek most intuitív módon érthető értékeket adnak vissza (a parancs paraméterekkel és a stdout kimenete).
  • Kisebb javítások a kódban.
  • Tesztlefedettség hozzáadása, valamint a meglévők átszervezése.
  • A Subprocess és Process osztályok hozzáadása, melyek célja egy további absztrakciós szint létrehozása a subprocess modul használatakor. Ezen felül jelentős része a kódismétlések kiküszöbölésére irányul Python 2/3 között, de potenciálisan más előnyöket is nyújthat.

Mi újság a smart-env-ben?

A python-shell-hez képest a smart-env könyvtárban kevesebb változás történt. Ennek oka egyszerű: a szabadidő hiánya, amely során néhány potenciális fejlesztés (például a környezeti változók automatikus kiegészítése) a következő verzióra lett áthelyezve.

A gyakorlatban a könyvtárban a következő változások történtek:

  • Kisebb javítások a kódban.
  • Refaktorálás.
  • A meglévő tesztek átszervezése és továbbfejlesztése.

A következő verziók tervei

A python-shell könyvtár

  • Nem blokkoló parancshívások támogatásának hozzáadása (a végrehajtás párhuzamosítása).

A smart-env könyvtár

  • A környezeti változók automatikus kiegészítése az ENV osztályban.
  • Az 'in' operátor támogatása az env-változó létezésének ellenőrzésére.
  • A str() és repr() funkcionalitás támogatása az ENV osztály számára.

A következő verziók időpontjáról további bejelentés fog történni a következő kommunikációs csatornákon:

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster