[ Foro de Python ]

Obtener Output de subprocess.call( o Popen)

22-May-2018 16:31
Esteban Lopez Diaz
1 Respuestas

Estimados ,
junto con saludarlos y desearles un buen día tengo una duda en la cual llevo días buscando y aun no encuentro una solución, estoy creando un script de utilidad en mi trabajo el cual esta en bash.. pero ya que python es lo mejor para manejar scripts estoy usando python para esto. La idea es simple.. les dejare el código para que puedan revisar


import subprocess
from subprocess import PIPE, Popen


ps = "ps"
argumento_ps = "-Af"
proceso = "tomcat7"

lista_procesos = subprocess.Popen([ps,argumento_ps], stdout=PIPE)
print(lista_procesos.communicate())

if proceso in lista_procesos:
	print "proceso no esta corriendo"



es algo siempre.. el print(lista_procesos.communicate()) lo pongo ahí para ver si el comando sirve.. lo que necesito es comprobar si el proceso tomcat7 se encuentra en la lista obtenida del comando ps -Af,  estoy leyendo un libro sobre python para administradores de Unix y Linux, trate de obtener el output del comando con subprocess.call() pero eso aunque no quiera mostrar el comando en la shell lo muestra de todas formas.. leyendo encontré la función Popen, la cual me guarda el output.. pero cuando quiero hacer la comprobación con IF me dice que el objeto no es Iterable.. Mi preguta es si existe otra funcion que ejecute el comando y no lo muestre por pantalla, pero que guarde el resultado en una variable y se pueda comprobar con IF ??

Atte

Esteban López  


16-Jun-2018 23:57
Nacho Cabanes (+84)

Una forma conceptualmente más sencilla (para mí) sería mandar a fichero el resultado de la orden "ps", y luego revisar las líneas de ese fichero, para ver si alguna de ellas contiene el texto "tomcat".

El fichero lo abres con algo como

procesos = open("procesos.dat", "r")

Y lees todas sus líneas con algo como

lineas = procesos.readlines()

(y cierras el fichero).

Ese "lineas" sí será iterable.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)