Colleghiamo Python e Bash: rilascio delle librerie python-shell e smart-env v. 1.0.1

Buon pomeriggio a tutti!

29 febbraio 2020 si è tenuto il rilascio ufficiale delle librerie smart-env e python-shell. Per chi non lo sapesse, consiglio di leggere preliminarmente il primo post.

In sintesi, tra le novità ci sono il completamento automatico dei comandi, l'espansione delle funzionalità per l'esecuzione dei comandi, un po' di refactoring e correzioni di bug.

Per maggiori dettagli, vi rimando al seguito.

Cosa c'è di nuovo in python-shell?

Inizio subito con il dessert.

Autocompletamento dei comandi

Siete d'accordo che è comodo quando l'editor/IDE/terminale suggerisce il nome del comando, a volte anche i parametri di invocazione? Ecco che python-shell sta lentamente progredendo nell’offrire funzionalità simili. Poiché i campi della classe Shell sotto il cofano non sono di fatto i suoi campi (l'onnipresente __getattr__), il completamento automatico è stato creato da zero (sovrascrivendo, di conseguenza, il metodo __dir__). Attualmente il completamento automatico funziona negli ambienti BPython e IPython. Certamente, ci piacerebbe vedere un'integrazione con prodotti più affermati come PyCharm, e in questa direzione si sta studiando la possibilità di realizzazione.

Aggiunta di proprietà

Con il rilascio, la classe Shell ha ottenuto una nuova proprietà last_command. La necessità è emersa a causa del fatto che durante la generazione di un'eccezione ShellException con un codice di uscita diverso da zero, l'oggetto Command non veniva restituito dalla chiamata __call__() dell'oggetto comando. Ora c'è la possibilità di fare così:

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

È stato anche 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 per Python

In praticamente qualsiasi sistema c'è almeno un programma il cui nome non è adatto come identificatore in Python (ad esempio, la nota utility 2to3). Non si riesce a chiamarlo usando

Shell.2to3()

non funziona — l'interprete non lo consentirà.
La soluzione è chiamare il comando in modo indiretto:

Shell("2to3")  # restituisce l'oggetto comando

Vale la pena notare che in questo modo si possono eseguire anche comandi validi dal punto di vista dell'interprete, il che lascia spazio per creare script flessibili come

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

Piccole modifiche

  • Sono stati implementati i metodi __repr__() e __str__() dell'oggetto della classe Command, che ora restituiscono valori intuitivamente comprensibili (il comando con i parametri e il suo output stdout rispettivamente).
  • Piccole correzioni nel codice.
  • Aggiunta della copertura dei test, così come riorganizzazione di quelli esistenti.
  • Aggiunta delle classi Subprocess e Process, il cui obiettivo è creare un ulteriore livello di astrazione nell'uso del modulo subprocess. Principalmente, ciò è necessario per eliminare le ripetizioni di codice nell'utilizzo di Python 2/3, ma potrebbe anche offrire altri vantaggi.

Cosa c'è di nuovo in smart-env?

A differenza di python-shell, nella libreria smart-env ci sono state meno modifiche. La ragione è semplice: mancanza di tempo libero, durante il quale alcuni miglioramenti potenziali (ad esempio, l'autocompletamento delle variabili d'ambiente) sono stati rinviati alla prossima versione.

In effetti, sono state apportate le seguenti modifiche alla libreria:

  • Piccole correzioni nel codice.
  • Refactoring.
  • Riorganizzazione e miglioramento dei test esistenti.

Piani per le prossime versioni

Libreria python-shell

  • Aggiunta del supporto per chiamate non bloccanti (parallelizzazione dell'esecuzione).

Libreria smart-env

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

Ulteriori annunci riguardo le date delle prossime versioni verranno forniti attraverso i seguenti canali di comunicazione:

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster