God förmiddag alla!
29 februari 2020 skedde den officiella mikrelease av biblioteken smart-env och python-shell. För dem som inte Àr insatta föreslÄr jag att ni lÀser .
Kortfattat, bland förÀndringarna finns kommandocompletions, utökade möjligheter för att starta kommandon, lite refaktorisering och buggfixar.
För detaljer, vÀnligen lÀs vidare.
Vad Àr nytt i python-shell?
Jag börjar direkt med desserten.
Autocompletion av kommandon
HÄller ni med om att det Àr bekvÀmt nÀr redaktören/IDE:n/terminalen föreslÄr kommandonamn och ibland Àven anropsparametrar? SÄ python-shell gör smÄ framsteg för att tillhandahÄlla sÄdan funktionalitet. Med tanke pÄ att klassens Shell-fÀlt under huven de facto inte Àr dess fÀlt (den allestÀdes nÀrvarande __getattr__), har autocompletion skapats frÄn grunden (via överlastning av metoden __dir__). För tillfÀllet fungerar autocompletion i miljöerna BPython och IPython. SjÀlvklart vill vi se integration med mer etablerade produkter som PyCharm, och i den riktningen undersöks möjligheterna för implementering.
LĂ€gg till egenskaper
I samband med utgÄvan har klassen Shell fÄtt en ny egenskap, last_command. Behovet av detta uppstod eftersom nÀr ett undantag ShellException genererades av ett kommando med en icke-noll returkod, returnerades inte objektet Command frÄn anropet __call__() av kommandot. Nu finns det möjlighet att göra sÄ hÀr:
try:
command = Shell.touch('/foo.txt')
except ShellException:
command = Shell.last_commandListan av egenskaper hos objektet Command har ocksÄ utökats. Ett fÀlt errors har lagts till, vilket returnerar kommandots utdata till felströmmen.
Köra kommandon med Python-ogiltiga namn
I praktiskt taget varje system finns det Ätminstone ett program vars namn inte Àr lÀmpligt som identifierare i Python (till exempel det kÀnda verktyget 2to3). Att anropa det med
Shell.2to3() kommer inte att fungera â tolken kommer inte att tillĂ„ta det.
Lösningen Àr att anropa kommandot pÄ en omvÀg:
Shell("2to3") # returnerar kommandot objektDet Àr vÀrt att notera att pÄ samma sÀtt kan man ocksÄ köra kommandon som Àr giltiga sett ur tolkarens perspektiv, vilket ger möjlighet till att skapa flexibla skript som
cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)SmÄ förÀndringar
- Metoderna __repr__() och __str__() av klassobjektet Command har implementerats, som nu ger intuitiva vÀrden (kommandot med parametrar och dess stdout-utdata respektive).
- SmÄ kodfixar.
- TillÀgg av testbeteckningar samt omorganisation av de befintliga.
- TillÀgg av klasserna Subprocess och Process, vars syfte Àr att skapa en extra abstraktionsnivÄ vid arbete med subprocess-modulen. Det Àr frÀmst nödvÀndigt för att undvika kodupprepningar nÀr man arbetar med Python 2/3, men kan ocksÄ ge andra fördelar.
Vad Àr nytt i smart-env?
Till skillnad frĂ„n python-shell har smart-env genomgĂ„tt fĂ€rre förĂ€ndringar. Anledningen Ă€r enkel â brist pĂ„ tid, vilket har lett till att vissa potentiella förbĂ€ttringar (t.ex. autokomplettering av miljövariabler) har flyttats till nĂ€sta version.
Faktum Àr att följande förÀndringar har gjorts i biblioteket:
- SmÄ kodfixar.
- Omstrukturering.
- Omarbete och förbÀttring av befintliga tester.
Planer för kommande versioner
Biblioteket python-shell
- TillÀgg av stöd för icke-blockerande kommandoanrop (parallellisering av exekvering).
Biblioteket smart-env
- Implementering av autokomplettering av miljövariabler i klassen ENV.
- Stöd för operatorn in för att kontrollera existensen av en env-variabel.
- Implementering av stöd för funktionerna str() och repr() i klassen ENV.
Information om datumen för kommande versioner kommer att meddelas via följande kommunikationskanaler:
- Uppdatering i denna artikel.
KĂ€lla: habr.com
