2010-05-14 73 views
7

我创建了一个Python脚本,用于监视日志文件的变化(如tail -f)并将其显示在控制台上。我想在web浏览器中访问Python脚本的输出。我需要什么来创建这个?我正在考虑使用Django和jQuery。任何提示或例子,不胜感激。在浏览器中使用tail -f

回答

8

首先创建一个python脚本来监视日志文件的变化。如果你只是为了调试而需要这个测试目的,那么使用Django或其他Web框架是一个矫枉过正的行为。使用套接字实现Http Web服务器功能非常简单。每当一个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()函数只会在2000毫秒后调用一次doUpdate()。它不会创建一个循环。如果你想循环,你需要将setTimeout调用移到doUpdate()函数中,很可能在最后,或将其更改为setInterval()。下面是两个JS函数的一个很好的比较:http://javascript.about.com/library/blstvsi.htm – gurun8 2010-05-15 04:32:03

+0

你是对的,setTimeout必须移入doUpdate。 – kgiannakakis 2010-05-15 08:11:08

2

我没有任何Python或Django的经验,但我假设你可以在Python中制作system call,如tail,并转发细节。

从那里,我会使用一个jQuery .ajax()调用一个JavaScript setInterval()循环到您的Python脚本,并将结果输出到网页上的div。总的来说一个非常简单的解

在这种情况下,你真的不会需要使用一个开放的tail -f系统调用,因为JS setInterval()方法的性质,Python脚本将被调用一遍又一遍,直到JS clearInterval()方法被调用。您将根据您要执行工作的位置将脚本细节汇总为Python或JS。我会建议Python,因为您可以在指尖上使用更强大的功能,并且您可以通过AJAX调用发送更少的数据。理论上,前端jQuery代码中可能不需要太多的逻辑。只显示数据。

0

为什么你不将数据输出到一个HTML文件?你可以运行一个cron作业来运行你的脚本,然后再创建一个可以从浏览器访问的HTML文件。

+0

我的脚本已经可以输出HTML,但我不想'刷新'每X秒完成一次页面。 – compie 2010-05-14 19:36:50