SoloCodigo

Programación Web y Scripting => Python => Mensaje iniciado por: fpython en Domingo 31 de Marzo de 2013, 22:07

Título: Proceso que se ejecute de forma continua ???
Publicado por: fpython en Domingo 31 de Marzo de 2013, 22:07
Hola estoy empezando con pythone y estoy intentando ejecutar un proceso subprocess.popen para que se ejecute de forma continua y poder leer por líneas la salida, algo así como si hiciera desde que arranca el ordenador un tail -f /var/log/syslog y pueda leer todas las líneas que se generan en este fichero hasta que se apague el ordenador. Sería algo así como un proceso que está siempre a la escucha y procesa líneas que el propio sistema vaya generando.

A ver si alguien puede ayudarme.

Saludos y gracias.
Título: Re:Proceso que se ejecute de forma continua ???
Publicado por: $francisco en Martes 2 de Abril de 2013, 03:26
si lo que quieres es leer la respuesta puede utilizar un bucle for para verla dentro de un while para poder seguir repitiendo comandos y decirle que cree un tubo entre la entra y la salida del proceso con stdin y stdout, y comunicarlo con comunicate:

Código: [Seleccionar]
while True:
cmd = raw_input(">>>")
if cmd == "exit":
    break
else:
    for i in range(3):
        p = subprocess.Popen('%s' %(cmd[cont]), shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
        p.wait()
        n = p.communicate()
        print n[0]
Título: Re:Proceso que se ejecute de forma continua ???
Publicado por: ryuz en Viernes 10 de Mayo de 2013, 11:21
Buenas :nosweat:, voy a proponer mi código y lo explico brevemente ya que no tiene gran complejidad.
Lo he creado en una instancia donde sea necesario leer continuamente un fichero de huellas (*.log).

Código: [Seleccionar]
#!/usr/bin/python
from sys import exit #Importamos la función de salida de sys.
import subprocess #Importamos la libreria de subprocess
filename = "/var/log/checkServer.log" #Asignamos la ruta y fichero que leeremos.
command = "tail -f %s" % (filename) #Asignamos el comando y el fichero anteriormente asignado.
ps = subprocess.Popen(command,shell=True) #Creamos el subproceso.
if(ps): #Comprobamos que existe.
        try: ps.wait() #Intentamos que se quede esperando hasta que interrumpa el programa o termine el mismo.
        except: exit(1)
        else: exit(0)

Los valores 1 y 0 de la función exit, se refiere a si se termino sin errores el programa (la lectura).