Creare amicizia tra Python e Bash: rilascio delle librerie python-shell e smart-env v. 1.0.1

Buona giornata a tutti!

29 2020 febbraio dell'anno ha avuto luogo il micro-rilascio ufficiale delle biblioteche ambiente intelligente и guscio di pitone. Per chi non lo sapesse consiglio di leggerlo prima primo post.

In breve, le modifiche includono il completamento dei comandi, funzionalità estese per l'esecuzione dei comandi, alcuni refactoring e correzioni di bug.

Per i dettagli vedere cat.

Cosa c'è di nuovo in Python-Shell?

Inizierò subito con il dessert.

Completamento del comando

Accetto: è conveniente quando l'editor/IDE/terminale ti chiede il nome del comando e talvolta anche i parametri di chiamata? Quindi Python-Shell sta gradualmente facendo progressi nel fornire funzionalità simili. Dato che i campi della classe Shell sotto il cofano non sono di fatto i suoi campi (l'onnipresente __getattr__), anche il completamento automatico è stato creato da zero (sovraccaricando rispettivamente il metodo __dir__). Il completamento automatico attualmente funziona negli ambienti BPython e IPython. Naturalmente mi piacerebbe vedere l'integrazione con prodotti più venerabili come PyCharm e le possibilità di implementazione sono allo studio in questa direzione.

Aggiunta di proprietà

Come parte del rilascio, la classe Shell ha ricevuto una nuova proprietà last_command. La necessità è nata perché quando una ShellException veniva lanciata da un comando con un codice di ritorno diverso da zero, l'oggetto Command non veniva restituito dalla chiamata __call__() all'oggetto comando. Ora c'è l'opportunità di farlo:

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

Anche l'elenco delle proprietà dell'oggetto Command è stato ampliato. Aggiunto un campo errori che restituisce l'output del comando al flusso di errori.

Esecuzione di comandi con nomi Python non validi

Quasi ogni sistema ha almeno un programma il cui nome non è adatto come identificatore in Python (ad esempio, la nota utility 2to3). Chiamala con

Shell.2to3()

Se non funziona, l’interprete non lo lascia passare.
La soluzione è chiamare il comando in modo indiretto:

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

Vale la pena notare che allo stesso modo è possibile eseguire comandi validi dal punto di vista dell'interprete, il che lascia la possibilità di creare script flessibili come

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

Piccoli cambiamenti

  • Sono stati implementati i metodi __repr__() e __str__() dell'oggetto classe Command, che ora producono valori intuitivi (rispettivamente un comando con parametri e il suo output stdout).
  • Correzioni minori del codice.
  • Aggiunta della copertura dei test e riorganizzazione di quelle esistenti.
  • Aggiunta delle classi Subprocess e Process, il cui scopo è creare un ulteriore livello di astrazione quando si lavora con il modulo subprocess. Principalmente necessario per eliminare la duplicazione del codice quando si lavora con Python 2/3, ma può potenzialmente fornire anche altri bonus.

Cosa c'è di nuovo in smart-env?

A differenza di Python-Shell, ci sono state meno modifiche nella libreria smart-env. La ragione di ciò è semplice: mancanza di tempo libero, durante il quale alcuni potenziali miglioramenti (ad esempio, il completamento automatico delle variabili di ambiente) sono stati spostati alla versione successiva.

Infatti alla libreria sono state apportate le seguenti modifiche:

  • Correzioni minori del codice.
  • Refactoring.
  • Riorganizzazione e affinamento dei test esistenti.

Piani per le prossime uscite

libreria Python-Shell

  • Aggiunto supporto per chiamate di comandi non bloccanti (parallelizzazione dell'esecuzione).

libreria smart-env

  • Implementazione del completamento automatico delle variabili di ambiente nella classe ENV.
  • Supporto per l'operatore in per verificare l'esistenza di una variabile env.
  • Implementazione del supporto per le funzioni str() e repr() per la classe ENV.

Le date delle prossime uscite verranno ulteriormente comunicate nei seguenti canali di comunicazione:

Fonte: habr.com

Aggiungi un commento