God eftermiddag alle sammen!
29. februar 2020 blev der officielt annonceret en mikro-udgivelse af bibliotekerne smart-env og python-shell. For dem, der ikke er bekendt med det, vil jeg foreslå at læse .
Kort sagt, blandt ændringerne er der automatisk fuldførelse af kommandoer, udvidelse af mulighederne for at køre kommandoer, lidt refaktorisering og fejlrettelser.
For detaljer henviser jeg til det kommende afsnit.
Hvad er nyt i python-shell?
Jeg vil starte direkte med desserten.
Automatisk fuldførelse af kommandoer
Enig - det er praktisk, når editoren/IDE'en/terminalen foreslår navnet på kommandoen, og nogle gange også parametrene for opkaldet? Sådan gør python-shell gradvist fremskridt med at sikre sådan funktionalitet. Da felterne i klassen Shell under overfladen de facto ikke er dens felter (den allestedsværende __getattr__), er automatisk fuldførelse også skabt fra bunden (ved at overbelaste metoden __dir__). Lige nu fungerer automatisk fuldførelse i miljøerne BPython og IPython. Selvfølgelig ønsker vi at se integration med mere etablerede produkter som PyCharm, og i den retning undersøges mulighederne for implementering.
Tilføjelse af egenskaber
I denne udgivelse har klassen Shell fået en ny egenskab last_command. Behovet for den opstod på grund af det faktum, at når der genereres en undtagelse ShellException fra en kommando med en ikke-nul returkode, blev objektet Command ikke returneret fra opkaldet __call__() af kommandoobjektet. Nu er der mulighed for at gøre sådan:
try:
command = Shell.touch('/foo.txt')
except ShellException:
command = Shell.last_commandDesuden er listen over egenskaber i objektet Command blevet udvidet. Der er tilføjet et felt errors, som returnerer output fra kommandoen til fejlloggen.
Kørsel af kommandoer med Python-ugyldige navne
I praktisk talt alle systemer er der mindst ét program, hvis navn ikke er egnet som identifier i Python (for eksempel det kendte værktøj 2to3). For at kalde det ved hjælp af
Shell.2to3() vil ikke fungere - fortolkeren vil ikke tillade det.
Løsningen er at kalde kommandoen via en omvej:
Shell("2to3") # returnerer kommandoobjektetDet er værd at bemærke, at man på samme måde kan køre også gyldige kommandoer set fra fortolkerens perspektiv, hvilket gør det muligt at lave fleksible scripts som
cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)Små ændringer
- Metoderne __repr__() og __str__() for klassen Command er blevet implementeret, og de returnerer nu intuitive værdier (kommandoen med parametre og dens stdout-uddata henholdsvis).
- Små rettelser i koden.
- Tilføjelse af testdækning samt omorganisering af eksisterende tests.
- Tilføjelse af klasserne Subprocess og Process, hvis mål er at skabe et ekstra abstraktionsniveau ved arbejdet med subprocess-modulet. Primært nødvendigt for at eliminere kodegentagelse ved brug af Python 2/3, men kan også give andre fordele.
Hvad er nyt i smart-env?
I modsætning til python-shell er der sket færre ændringer i smart-env-biblioteket. Årsagen er simpel — manglende fritid, hvilket har betydet, at nogle potentielle forbedringer (for eksempel automatisk udfyldning af miljøvariabler) er blevet udskudt til næste udgivelse.
Faktisk er der lavet følgende ændringer i biblioteket:
- Små rettelser i koden.
- Refaktorering.
- Omorganisering og forbedring af eksisterende tests.
Plans for upcoming releases
Biblioteket python-shell
- Tilføjelse af understøttelse af ikke-blokerende kommandoopkald (parallelisering af udførelse).
Biblioteket smart-env
- Implementering af automatisk udfyldning af miljøvariabler i klassen ENV.
- Understøttelse af operatoren in for at tjekke for eksistensen af en env-variabel.
- Implementering af understøttelse af funktionerne str() og repr() for klassen ENV.
Oplysninger om datoerne for de kommende udgivelser vil blive annonceret gennem følgende kommunikationskanaler:
- Opdateringen i denne artikel.
Kilde: habr.com
