tail -f в веб-браузере - PullRequest
       20

tail -f в веб-браузере

7 голосов
/ 14 мая 2010

Я создал скрипт Python, который отслеживает изменения в файле журнала (например, tail -f) и отображает его на консоли Я хотел бы получить доступ к выводу скрипта Python в веб-браузере. Что мне нужно, чтобы создать это? Я думал об использовании Django и jQuery. Любые советы или примеры приветствуются.

Ответы [ 3 ]

8 голосов
/ 15 мая 2010

Сначала создайте скрипт на 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);

Вы также можете создать обратные вызовы для ошибки и тайм-аута, чтобы сообщить о проблеме с сервером.

2 голосов
/ 14 мая 2010

У меня нет опыта работы с Python или Django, но я предполагаю, что вы можете сделать системный вызов , как tail в Python, и передать детали.

Оттуда я буду использовать вызов jQuery .ajax() с циклом javascript setInterval() для вашего скрипта Python и выводить результаты в div на веб-странице. В целом довольно простое решение.

В этом случае вам на самом деле не нужно использовать системный вызов open tail -f, поскольку природа метода JS setInterval(), сценарий Python будет вызываться снова и снова, пока метод JS clearInterval() называется. Вы будете собирать детали своего скрипта в Python или JS в зависимости от того, где вы хотите выполнить работу. Я бы посоветовал Python, поскольку у вас под рукой будет больше надежных функций, и вы будете отправлять меньше данных через вызов AJAX. Теоретически, вероятно, не должно быть слишком много логики в коде jQuery на внешнем интерфейсе. Просто отобразите данные.

0 голосов
/ 14 мая 2010

Почему вы не выводите данные в файл HTML? Вы можете запустить задание cron для запуска вашего скрипта, который, в свою очередь, выдаст HTML-файл, доступ к которому можно получить из браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...