【问题标题】:tail -f in a webbrowser浏览器中的tail -f
【发布时间】:2011-02-19 16:18:02
【问题描述】:

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

【问题讨论】:

    标签: javascript jquery python django console


    【解决方案1】:

    首先创建一个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);
    

    您还可以为错误和超时创建回调以报告服务器问题。

    【讨论】:

    • 澄清一点,setTimeout() 函数只会在 2000 毫秒后调用一次 doUpdate()。它不会创建循环。如果您希望它循环,您需要将 setTimeout 调用移动到 doUpdate() 函数中,很可能在最后,或者将其更改为 setInterval()。这是两个 JS 函数的一个很好的小比较:javascript.about.com/library/blstvsi.htm
    【解决方案2】:

    为什么不将数据输出到 HTML 文件?你可以运行一个 cron 作业来运行你的脚本,这反过来会喷出一个 HTML 文件,可以从浏览器访问。

    【讨论】:

    • 我的脚本已经可以输出 HTML,但我不想每 X 秒“刷新”一次以完成页面。
    【解决方案3】:

    我没有任何 Python 或 Django 经验,但我假设您可以在 Python 中创建 system call 之类的 tail 并传递详细信息。

    从那里,我将使用 jQuery .ajax() 调用和 javascript setInterval() 循环到您的 Python 脚本,并将结果输出到网页上的 div。总体而言,这是一个非常简单的解决方案。

    在这种情况下,您真的不需要使用打开的tail -f 系统调用,因为JS setInterval() 方法的性质,Python 脚本将被一遍又一遍地调用,直到JS clearInterval() 方法叫做。您将在 Python 或 JS 中聚合您的脚本详细信息,具体取决于您要在哪里进行工作。我建议使用 Python,因为您可以轻松获得更强大的功能,并且您可以通过 AJAX 调用发送更少的数据。从理论上讲,前端的 jQuery 代码中可能不需要太多的逻辑。只显示数据。

    【讨论】:

      猜你喜欢
      • 2010-11-02
      • 2015-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 2017-05-10
      • 2023-03-25
      相关资源
      最近更新 更多