我有一个连续运行的python脚本。它每30秒输出2行信息。我希望能够在网上查看此输出。特别是,我希望网站能够自动更新(每30秒在页面/网站顶部添加新输出,而不必刷新页面)。
我知道我可以用javascript做到这一点但是有一个基于python的解决方案吗?即使有,是javascript的方式去?如果需要,我非常愿意学习javascript,但如果没有,我想继续关注python。
对于基本问题感到抱歉,但在网络编程方面,我仍然一无所知。
THX!
答案 0 :(得分:5)
这个问题似乎有两件事。
网络演示。这在Python中很容易实现 - 使用Django或TurboGears或任何基于Python的Web框架。
刷新网页以显示新数据。这可以通过两种方式完成。
有些花哨的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)
答案 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服务器将不会能够接受任何进一步的连接..所以,你需要使用更专业的服务器..
答案 8 :(得分:0)
这是真正的网络应用吗?或者,这对您在浏览器中查看输出是否方便?如果方便起见,可以考虑使用mod_python。
mod_python是apache webserver的扩展,它在Web服务器中嵌入了python解释器(因此脚本运行服务器端)。它很容易让你在本地或为了方便自己做这件事。然后你可以用mod python运行脚本并让处理程序发布你的结果。你也许可以很容易地实现刷新,但我不知道如何做到这一点。
希望这有帮助...查看mod_python。一旦完成所有配置,它就不会太糟糕。