Я создал скрипт Python, который отслеживает файл журнала для изменений (например, tail -f) и отображает его на консоли. Я хотел бы получить доступ к выводам скрипта Python в веб-браузере. Что мне нужно для создания этого? Я думал об использовании Django и jQuery. Любые советы или примеры приветствуются.tail -f в webbrowser
ответ
Сначала создайте скрипт python, который отслеживает файл журнала для изменений. Если вам это нужно только для целей тестирования отладки, то это чрезмерное использование Django или другой веб-инфраструктуры. Очень просто реализовать функциональность веб-сервера Http с помощью сокетов. Всякий раз, когда идет запрос Http GET, выполняйте только разницу с другим запросом. Чтобы достичь этого, вам нужно сохранить в памяти статус каждого входящего запроса (например, номер последней строки в файле).
Часть jQuery на самом деле довольно проста. Настройте таймер с помощью функции setTimeout. Что-то, как это будет делать:
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);
Вы также можете создать обратные вызовы для ошибок и тайм-аут, чтобы сообщить о проблеме с сервером.
У меня нет опыта Python или Django, но я предполагаю, что вы можете сделать system call как tail
в Python и передать информацию.
Оттуда я использую вызов jQuery .ajax()
с циклом javascript setInterval()
на ваш скрипт Python и вывод результатов в div на веб-странице. В целом довольно простое решение.
В этом случае, вам действительно не нужно будет использовать открытый tail -f
системный вызов, потому что природа методы JS setInterval()
, сценарий Python будет вызываться снова и снова до тех пор, clearInterval()
метод JS не называются. Вы будете агрегировать детали своего скрипта в Python или JS в зависимости от того, где вы хотите выполнить эту работу. Я бы предложил Python, так как у вас были бы более надежные функции у вас под рукой, и вы отправили бы меньше данных через вызов AJAX. Теоретически, вероятно, в коде jQuery на передней панели не должно быть слишком много логики. Просто покажите данные.
Почему вы не выводить данные в виде HTML-файла? Вы можете запустить задание cron, чтобы запустить ваш скрипт, который, в свою очередь, вытащил бы HTML-файл, доступ к которому можно получить из браузера.
Мой скрипт уже может выводить HTML, но я не хочу «обновлять», чтобы завершить страницу каждые X секунд. – compie
- 1. альтернатива tail -F
- 2. Java "tail -f" wrapper
- 3. Понимание F # tail-recursive
- 4. tail -f реализация в node.js
- 5. Реализовать «tail -f» в C++
- 6. Веб-реализация «tail -f filename»?
- 7. tail -f using PuTTY hangs
- 8. Tail -f с внешним СЭДОМ
- 9. «tail -f» делает диск полным?
- 10. python sys.stdin.read() from tail -f
- 11. Изменение вывода `tail -f` в реальном времени
- 12. Как использовать tail -f в сценарии оболочки?
- 13. Как использовать tail -f в цикле
- 14. Как сломать команду tail -f в bash
- 15. Есть ли эквивалент `tail -f` в Perl?
- 16. Пользовательская реализация функции «tail -f» в C
- 17. tail -f в python без времени.sleep
- 18. PHP Чтение linux tail -f с SSH2
- 19. Документация или учебник JNC Tail-f
- 20. Rfactor this F # code to tail recursion
- 21. tail -f pipe не только одна строка
- 22. Tail рекурсивная копия SEQ в список в F #
- 23. В чем разница между tail -f и tailf в unix?
- 24. Программный реализация tail -f в чистом виде C
- 25. Как открыть и следовать файлу в Dart (например, tail -f)?
- 26. Как выполнить обработку `tail -f logfile.txt` в node.js?
- 27. Как просмотреть журнал aws в реальном времени (например, tail -f)
- 28. tail -f все файлы в каталоге с течением времени
- 29. Возможно ли получить выход команды «tail -f» в java-программу?
- 30. Как остановить команду tail -f, выполненную в подклассу
Точка уточнения, функция setTimeout() вызывает только вызов doUpdate() один раз после 2000 миллисекунд. Он не будет создавать цикл. Если вы хотите, чтобы он зациклился, вам нужно переместить вызов setTimeout в функцию doUpdate(), скорее всего, в самом конце или изменить его на setInterval(). Вот небольшое сравнение двух функций JS: http://javascript.about.com/library/blstvsi.htm – gurun8
Вы правы, setTimeout необходимо перенести в doUpdate. – kgiannakakis