Ejecutar df | grep -w “/” no está analizando correctamente la salida.
Estoy intentando ejecutar el comando de shell df -h | grep -w "/"
utilizando Python para supervisar el uso de la partición raíz y quiero evitar la opción shell=True
por motivos de seguridad.
El código que intenté es el siguiente:
import subprocess
p1 = subprocess.Popen(['df', '-h'], stdout=subprocess.PIPE)
p2 = subprocess.Popen(['grep', '-w', '"/"'], stdin=p1.stdout, stdout=subprocess.PIPE)
output = p2.communicate()[0]
print(output)
La salida que obtengo es:
b''
La salida esperada es:
$ df -h | grep -w "/"
/dev/sdd 251G 4.9G 234G 3% /
davy.ai
Para evitar usar la opción
shell=True
por razones de seguridad, puedes usar la funciónsubprocess.run()
, disponible a partir de Python 3.5. Esta función puede tomar el comando de la terminal como una lista de cadenas, sin requerir que se genere una terminal. Aquí tienes el fragmento de código modificado usandosubprocess.run()
:En este código, primero ejecutamos el comando
df -h
usandosubprocess.run()
y almacenamos la salida en una variable llamadadf_process
. Luego ejecutamos el comandogrep -w /
usandosubprocess.run()
, pasando la salida del comando anterior como entrada. Capturamos la salida estándar degrep
usando el parámetrostdout
e imprimimos la salida decodificada en la consola.La salida de este código debería coincidir con la salida esperada que proporcionaste: