在Web上获取Python脚本输出的最简单方法是什么?

时间:2009-04-08 19:31:05

标签: javascript python

我有一个连续运行的python脚本。它每30秒输出2行信息。我希望能够在网上查看此输出。特别是,我希望网站能够自动更新(每30秒在页面/网站顶部添加新输出,而不必刷新页面)。

我知道我可以用javascript做到这一点但是有一个基于python的解决方案吗?即使有,是javascript的方式去?如果需要,我非常愿意学习javascript,但如果没有,我想继续关注python。

对于基本问题感到抱歉,但在网络编程方面,我仍然一无所知。

THX!

9 个答案:

答案 0 :(得分:5)

这个问题似乎有两件事。

  1. 网络演示。这在Python中很容易实现 - 使用Django或TurboGears或任何基于Python的Web框架。

  2. 刷新网页以显示新数据。这可以通过两种方式完成。

    • 有些花哨的Javascript要刷新。

    • 一些花哨的HTML来刷新页面。 meta refresh标记是您想要的。如果你这样做,你就有了一个全Python解决方案。

答案 1 :(得分:3)

如果您想要一种简单的方法将数据从Python脚本打印到网页并自动更新,您只需从脚本中打印即可。例如,将Apache与下面的Python CGI脚本一起使用:

#!/usr/bin/python 

import time
import sys
import random

def write(inline=''):
    sys.stdout.write(inline)
    sys.stdout.write('\r\n')
    sys.stdout.flush()

#prints out random digits between 1 and 1000 indefinitely
write("Content-type: text/html\r\n")
i = 0
while(True):
    i = i + 1
    time.sleep(1)
    write(str(i) + "<br />")

如果我在浏览器中导航到它(Firefox,不知道其他浏览器在缓冲等方面是否可能有不同的工作方式),它会不断打印数字。请注意,它按顺序打印,因此较新的数据位于底部而不是顶部,但它可能会起作用取决于您想要做什么。

如果这不是您真正想要的,那么唯一的另一种方法是自动刷新页面(在iframe中,或整个页面)或使用javascript进行数据提取。

您可以在iframe或页面HTML源中使用元刷新标记,并且每次刷新时,CGI都可以打印新数据。或者,您可以使用带有XMLHTTPRequest的javascript来读取新数据,而无需刷新可视页面。

答案 2 :(得分:2)

您可以使用Comet,但我强烈反对您不这样做。我只想写一个简短的Javascript,使用jQuery这非常简单。

另一种可能性是使用每30秒重新加载一次的iframe,这会阻止整个页面重新加载。

答案 3 :(得分:2)

如果你想完全在python中完成,你可以使用pyjamas

它直接从python代码生成javascript,因此你可以避免完全自己编写javascript。

答案 4 :(得分:1)

JavaScript是向网站添加此类交互性的主要方式。您可以制作后端Python,但客户端必须使用JavaScript AJAX调用来更新页面。 Python不能在浏览器中运行,所以如果你只想使用Python,那你就不走运了。

(也可以使用Flash或Java applet,但这对于看似小问题的解决方案来说是一个非常重要的解决方案。)

答案 5 :(得分:1)

您需要以某种方式使用Javascript进行30秒刷新。或者,您可以设置元标记刷新每30秒重定向到当前页面,但Javascript路由将阻止页面闪烁。

答案 6 :(得分:1)

将输出写入日志文件,并通过Web服务器将日志文件加载到浏览器。如果需要自动刷新,请创建一个带有标记的模板HTML文件,每15秒刷新一次:

<META HTTP-EQUIV="refresh" CONTENT="15">

并使用server side include在页面上包含日志文件。

答案 7 :(得分:1)

也许"long polling"正是您要找的?

长轮询可以被描述为“HTTP推送”,基本上你有一个(Python)脚本通过web服务器提供,它只在可用时输出数据..然后你尝试通过Javascript异步加载这个页面,当它你没有重试,当它成功时你对数据做了一些事情(通常显示它)

my answer中的示例都在PHP中,但它只有2个命令(sleep(rand(1, 10)) - 其他几个用于演示javascript的错误处理)

嗯,它不是相当那么简单..你不能只通过Apache提供CGI python脚本,因为你将耗尽工作线程,而web服务器将不会能够接受任何进一步的连接..所以,你需要使用更专业的服务器..

  • twisted Python框架非常适合此类服务器 - 以下两台服务器偶然都是用它编写的
  • cometd - “最着名的”长轮询服务器的事情,虽然我从来没有太多运气的Python实现
  • slosh - 似乎非常简单地使用..在Python中实现,虽然你可以通过HTTP请求与它进行交互

答案 8 :(得分:0)

这是真正的网络应用吗?或者,这对您在浏览器中查看输出是否方便?如果方便起见,可以考虑使用mod_python。

mod_python是apache webserver的扩展,它在Web服务器中嵌入了python解释器(因此脚本运行服务器端)。它很容易让你在本地或为了方便自己做这件事。然后你可以用mod python运行脚本并让处理程序发布你的结果。你也许可以很容易地实现刷​​新,但我不知道如何做到这一点。

希望这有帮助...查看mod_python。一旦完成所有配置,它就不会太糟糕。