Buon pomeriggio a tutti!
29 febbraio 2020 si è tenuto il rilascio ufficiale delle librerie smart-env e python-shell. A coloro che non sono al corrente, suggerisco di leggere prima .
In breve, i cambiamenti includono l'autocompletamento dei comandi, l'espansione delle possibilità di esecuzione dei comandi, un po’ di refactoring e correzioni di bug.
Per i dettagli, vi invito a proseguire.
Cosa c'è di nuovo in python-shell?
Inizierò subito con il dolce.
Autocompletamento dei comandi
Senza dubbio è comodo quando l'editor/IDE/terminale suggerisce il nome del comando, e talvolta anche i parametri di chiamata. Anche python-shell si sta muovendo a piccoli passi per garantire questa funzionalità. Poiché i campi della classe Shell sotto il cofano non sono effettivamente i suoi campi (l'onnipresente __getattr__), l'autocompletamento è stato creato anche da zero (sovrascrivendo, appunto, il metodo __dir__). Attualmente, l'autocompletamento funziona negli ambienti BPython e IPython. Naturalmente, c'è voglia di vedere un'integrazione con prodotti più noti come PyCharm, e in questa direzione si sta studiando la possibilità di realizzazione.
Aggiunta di proprietà
Con il rilascio, la classe Shell ha ricevuto una nuova proprietà last_command. Questa necessità è emersa a seguito della generazione di un'eccezione ShellException da parte di un comando con un codice di ritorno diverso da zero, poiché l'oggetto Command non veniva restituito dalla chiamata a __call__() dell'oggetto comando. Ora è possibile fare in questo modo:
try:
command = Shell.touch('/foo.txt')
except ShellException:
command = Shell.last_commandSi è inoltre ampliato l'elenco delle proprietà dell'oggetto Command. È stato aggiunto il campo errors, che restituisce l'output del comando nel flusso di errore.
Esecuzione di comandi con nomi non validi in Python
Praticamente in ogni sistema esiste almeno un programma il cui nome non è valido come identificatore in Python (ad esempio, l'utility nota 2to3). Non è possibile chiamarlo usando
Shell.2to3() il quale non verrà accettato dall'interprete.
La soluzione consiste nell'invocare il comando in modo alternativo:
Shell("2to3") # restituisce l'oggetto comandoVale la pena notare che in questo modo è possibile eseguire anche comandi validi secondo l'interprete, il che consente di creare script flessibili come
cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)Modifiche minori
- Sono stati implementati i metodi __repr__() e __str__() della classe Command, che ora restituiscono valori intuitivi (il comando con i parametri e il relativo output stdout).
- Piccole correzioni al codice.
- Aggiunta di copertura con test e riorganizzazione di quelli esistenti.
- Aggiunta delle classi Subprocess e Process, il cui obiettivo è creare un ulteriore livello di astrazione quando si lavora con il modulo subprocess. In gran parte, necessario per eliminare le ripetizioni di codice quando si lavora con Python 2/3, ma potrebbe anche portare ad altri vantaggi.
Cosa c'è di nuovo in smart-env?
A differenza di python-shell, ci sono stati meno cambiamenti nella libreria smart-env. Questo è dovuto a una semplice ragione: la mancanza di tempo libero, durante il quale alcuni potenziali miglioramenti (come l'autocompletamento delle variabili d'ambiente) sono stati rimandati alla prossima versione.
In effetti, nella libreria sono state fatte le seguenti modifiche:
- Piccole correzioni al codice.
- Refactoring.
- Riorganizzazione e miglioramento dei test esistenti.
Piani per le prossime versioni
La libreria python-shell
- Aggiunta del supporto per chiamate non bloccanti ai comandi (parallelizzazione dell'esecuzione).
Libreria smart-env
- Implementazione dell'autocompletamento delle variabili d'ambiente nella classe ENV.
- Supporto dell'operatore in per la verifica dell'esistenza della variabile env.
- Implementazione del supporto per le funzioni str() e repr() per la classe ENV.
Ulteriori informazioni sulle date delle prossime release verranno annunciate nei seguenti canali di comunicazione:
- Aggiornamento in questo articolo.
Fonte: habr.com
