2010-05-14 13 views
7

He creado un script de Python que supervisa un archivo de registro para ver los cambios (como tail -f) y lo muestra en una consola. Me gustaría acceder al resultado de la secuencia de comandos de Python en un navegador web. ¿Qué necesitaría para crear esto? Estaba pensando en usar Django y jQuery. Cualquier consejo o ejemplo son muy apreciados.tail -f en un navegador web

Respuesta

8

Primero cree una secuencia de comandos python que supervise el archivo de registro para ver los cambios. Si solo necesita esto para la depuración, para fines de prueba, es excesivo usar Django u otro marco web. Es muy fácil implementar la funcionalidad del servidor web Http usando sockets. Siempre que se presente una solicitud Http GET, solo sirva la diferencia de la solicitud diferente. Para lograr esto, necesita almacenar en la memoria el estado de cada solicitud que viene (por ejemplo, el número de la última línea en el archivo).

La parte de jQuery es realmente bastante fácil. Configure un temporizador con la función setTimeout. Algo como esto va a hacer:

function doUpdate() { 
    $.ajax({type: "GET", url : tailServiceUrl, 
      success: function (data) { 
      if (data.length > 4) 
      { 
       // Data are assumed to be in HTML format 
       // Return something like <p/> in case of no updates 
       $("#logOutputDiv").append(data); 
      } 
      setTimeout("doUpdate()", 2000); 
      }}); 
} 

setTimeout("doUpdate()", 2000); 

También puede crear devoluciones de llamada por error y tiempo de espera para informar un problema con el servidor.

+0

Punto de aclaración, la función setTimeout() solo llamará a doUpdate() una vez después de 2000 milisegundos. No creará un bucle. Si desea que se repita, tendrá que mover la llamada setTimeout a la función doUpdate(), muy probablemente al final, o cambiarla a setInterval(). Aquí hay una pequeña y bonita comparación de ambas funciones de JS: http://javascript.about.com/library/blstvsi.htm – gurun8

+0

Tiene razón, setTimeout debe moverse a doUpdate. – kgiannakakis

2

No tengo ninguna experiencia en Python o Django pero supongo que puede hacer un system call como tail en Python y retransmitir los detalles.

A partir de ahí, utilizaría una llamada jQuery .ajax() con un javascript setInterval() a su secuencia de comandos de Python y los resultados a un div en la página web. En general, es una solución bastante simple.

En este caso, realmente no se tendría que usar una llamada tail -f sistema abierto debido a que la naturaleza del método de JS setInterval(), la secuencia de comandos de Python se llama una y otra vez hasta que se llame al método clearInterval() JS. Agrupará los detalles de su secuencia de comandos en Python o JS dependiendo de dónde desee hacer el trabajo. Sugeriría Python ya que tendría funciones más robustas a su alcance y enviaría menos datos a través de la llamada AJAX. Teóricamente, probablemente no se necesite demasiada lógica en el código jQuery en el front-end. Solo muestra los datos.

0

¿Por qué no enviar los datos a un archivo HTML? Podría ejecutar un trabajo cron para ejecutar su script que a su vez generaría un archivo HTML que podría tener acceso desde el navegador.

+0

Mi script ya puede generar HTML, pero no quiero 'actualizar' para completar la página cada X segundos. – compie

Cuestiones relacionadas