Esegui il comando Bash in Python

Muhammad Waiz Khan 25 aprile 2021
  1. Esegui comandi Bash in Python usando il metodo run() del modulo subprocess
  2. Esegui comandi Bash in Python usando il metodo Popen() del modulo subprocess
Esegui il comando Bash in Python

Questo tutorial spiegherà vari modi per eseguire i comandi bash in Python. Bash è un interprete della shell o del linguaggio di comando utilizzato nei sistemi operativi Linux e Unix. E il comando bash è un’istruzione inviata da un utente al sistema operativo per eseguire un’attività specifica, come il comando cd per cambiare la directory corrente, il comando mkd per creare una nuova directory e il comando ls per elenca file e sottodirectory in una directory, ecc.

Esegui comandi Bash in Python usando il metodo run() del modulo subprocess

Il metodo run() del modulo subprocess accetta il comando passato come una stringa. Per ottenere l’output o l’errore di output del comando, dovremmo impostare l’argomento stdout e l’argomento stderr su PIPE. Il metodo run restituisce un processo completato contenente stdout, stderr e returncode come attributi.

Il codice di esempio mostra come utilizzare il metodo run() per eseguire un comando bash in Python.

from subprocess import PIPE

comp_process = subprocess.run("ls", stdout=PIPE, stderr=PIPE)
print(comp_process.stdout)

Esegui comandi Bash in Python usando il metodo Popen() del modulo subprocess

Il metodo Popen() del modulo subprocess ha funzionalità simili al metodo run(), ma è difficile da usare. Il metodo Popen(), a differenza del metodo run(), non restituisce un oggetto processo completato come output, e il processo avviato dal metodo Popen() deve essere gestito separatamente, il che lo rende difficile da uso.

Invece del processo completato, il metodo Popen() restituisce un oggetto di processo come output. Il processo restituito deve essere terminato utilizzando il metodo process.kill() o process.terminate().

Come il metodo run(), dobbiamo impostare gli argomenti stdout e stderr di Popen() per ottenere l’output e l’errore del comando. Inoltre, è possibile accedere all’output e all’errore tramite l’oggetto processo restituito utilizzando il metodo process.communicate.

L’esempio di codice seguente mostra come eseguire un comando bash usando il metodo Popen() e come ottenere i valori stdout e stderr e poi terminare il processo in Python:

from subprocess import PIPE

process = subprocess.Popen("ls", stdout=PIPE, stderr=PIPE)
output, error = process.communicate()
print(output)
process.kill