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 .
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_commandA 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 objektumotMegjegyzendő, 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:
- Az ezt a cikket frissítő közleményben.
Forrás: habr.com
