2010-05-14 5 views
7

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

ответ

8

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

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

+0

Точка уточнения, функция setTimeout() вызывает только вызов doUpdate() один раз после 2000 миллисекунд. Он не будет создавать цикл. Если вы хотите, чтобы он зациклился, вам нужно переместить вызов setTimeout в функцию doUpdate(), скорее всего, в самом конце или изменить его на setInterval(). Вот небольшое сравнение двух функций JS: http://javascript.about.com/library/blstvsi.htm – gurun8

+0

Вы правы, setTimeout необходимо перенести в doUpdate. – kgiannakakis

2

У меня нет опыта Python или Django, но я предполагаю, что вы можете сделать system call как tail в Python и передать информацию.

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

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

0

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

+0

Мой скрипт уже может выводить HTML, но я не хочу «обновлять», чтобы завершить страницу каждые X секунд. – compie

Смежные вопросы