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
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.
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.
¿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.
Mi script ya puede generar HTML, pero no quiero 'actualizar' para completar la página cada X segundos. – compie
- 1. Implementar "tail -f" en C++
- 2. F # Tail Recursive Function Example
- 3. Texto sublime 2 tail -f en Windows
- 4. Cómo pasar tail -f en awk
- 5. tail -f en python sin time.sleep
- 6. Finalizando tail -f iniciado en un script de shell
- 7. 'grep -q' no sale con 'tail -f'
- 8. Capturando estándar desde tail -f "follow"
- 9. ¿Cómo hacer el proceso `` tail -f logfile.txt`-like en node.js?
- 10. jsp para ver el archivo de registro (como "web tail -f")
- 11. 'tail -f' una tabla de base de datos
- 12. Emulando un navegador web
- 13. F # biblioteca del servidor web
- 14. ¿Qué es un simple código F # que genera la instrucción .tail IL?
- 15. navegador Ctrl + F Buscar texto no visible
- 16. Cómo tail-f el último archivo de registro con un patrón dado
- 17. ¿Hay un navegador web basado en C#?
- 18. navegador web incorporado
- 19. Desplazamiento de la animación del archivo de registro (tail -f) usando javascript
- 20. experto rastreador ejemplo F # Web
- 21. jEditorPane como navegador web
- 22. pitón navegador web
- 23. borrar la pantalla cuando el archivo se trunca mientras se usa `tail -f`
- 24. Navegador API REST basado en la web (explorador, navegador, rambler)?
- 25. incrustar un navegador web en una aplicación java
- 26. ¿Cómo funciona el botón Atrás en un navegador web?
- 27. cómo ejecutar un applet de Java en el navegador web
- 28. necesito un navegador web en mi aplicación de escritorio
- 29. ¿Algún navegador web permite escribir en stdout?
- 30. LinkLabel ... abrir en el navegador web predeterminado?
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
Tiene razón, setTimeout debe moverse a doUpdate. – kgiannakakis