Maak Python and Bash Friendship: vrystelling van die python-shell en smart-env v biblioteke. 1.0.1

Goeie dag almal!

Februarie 29 2020 jaar amptelike mikro-vrystelling van biblioteke plaasgevind slim-env и luislang-dop. Vir diegene wat nie weet nie, stel ek voor dat u dit eers lees eerste pos.

Kortom, die veranderinge sluit in opdragvoltooiing, uitgebreide vermoëns om opdragte uit te voer, sommige herfaktorering en foutoplossings.

Vir besonderhede sien kat.

Wat is nuut in python-shell?

Ek sal dadelik met nagereg begin.

Opdrag voltooiing

Stem saam - dit is gerieflik wanneer die redigeerder/IDE/terminal jou vra vir die naam van die opdrag, en soms selfs die oproepparameters? So python-shell maak geleidelik vordering met die verskaffing van soortgelyke funksionaliteit. As gevolg van die feit dat die velde van die Shell-klas onder die enjinkap de facto nie sy velde is nie (die alomteenwoordige __getattr__), is outovoltooiing ook van nuuts af geskep (deur onderskeidelik die __dir__-metode te oorlaai). Outovoltooiing werk tans in BPython- en IPython-omgewings. Natuurlik wil ek integrasie met meer eerbiedwaardige produkte soos PyCharm sien, en implementeringsmoontlikhede word in hierdie rigting bestudeer.

Voeg eienskappe by

As deel van die vrystelling het die Shell-klas 'n nuwe last_command-eienskap ontvang. Die behoefte daarvoor het ontstaan ​​omdat wanneer 'n ShellException gegooi is deur 'n opdrag met 'n nie-nul terugkeerkode, is die Command-objek nie teruggestuur vanaf die __call__()-oproep na die opdrag-objek nie. Nou is daar 'n geleentheid om dit te doen:

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

Die lys eienskappe van die Command-objek het ook uitgebrei. Het 'n foutveld bygevoeg wat die opdraguitset na die foutstroom terugstuur.

Lopende opdragte met ongeldige Python-name

Byna elke stelsel het ten minste een program waarvan die naam nie geskik is as 'n identifiseerder in Python nie (byvoorbeeld die bekende 2to3-nutsding). Bel haar met

Shell.2to3()

As dit nie werk nie, sal die tolk dit nie deurlaat nie.
Die oplossing is om die opdrag op 'n rotonde manier te roep:

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

Dit is opmerklik dat u op dieselfde manier opdragte kan uitvoer wat geldig is vanuit die oogpunt van die tolk, wat die geleentheid bied om buigsame skrifte soos

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

Geringe veranderinge

  • Die __repr__() en __str__() metodes van die Command-klasobjek is geïmplementeer, wat nou intuïtiewe waardes produseer ('n opdrag met onderskeidelik parameters en sy stdout-uitvoer).
  • Geringe kode regstellings.
  • Voeg toetsdekking by, sowel as herorganisering van bestaandes.
  • Die byvoeging van die Subproses- en Prosesklasse, waarvan die doel is om 'n bykomende vlak van abstraksie te skep wanneer met die subprosesmodule gewerk word. Meestal nodig om kodeduplisering uit te skakel wanneer jy met Python 2/3 werk, maar kan moontlik ook ander bonusse verskaf.

Wat is nuut in smart-env?

Anders as python-shell, was daar minder veranderinge in die smart-env-biblioteek. Die rede hiervoor is eenvoudig - gebrek aan vrye tyd, waartydens sommige potensiële verbeterings (byvoorbeeld outovoltooiing van omgewingsveranderlikes) na die volgende vrystelling verskuif is.

Trouens, die volgende veranderinge is aan die biblioteek aangebring:

  • Geringe kode regstellings.
  • Refaktorering.
  • Herorganisasie en verfyning van bestaande toetse.

Planne vir volgende vrystellings

python-shell-biblioteek

  • Voeg ondersteuning by vir nie-blokkerende opdragoproepe (parallellisering van uitvoering).

smart-env-biblioteek

  • Implementering van outovoltooiing van omgewingsveranderlikes in die ENV-klas.
  • Ondersteuning vir die in-operateur om die bestaan ​​van 'n env-veranderlike na te gaan.
  • Implementering van ondersteuning vir die str()- en repr()-funksies vir die ENV-klas.

Die datums van die volgende vrystellings sal verder in die volgende kommunikasiekanale aangekondig word:

Bron: will.com

Voeg 'n opmerking