Javascript 什么';在web上获取Python脚本输出的最简单方法是什么?
我有一个连续运行的python脚本。它每30秒输出2行信息。我希望能够在web上查看此输出。特别是,我希望站点自动更新(每30秒在页面/站点顶部添加一次新输出,而无需刷新页面) 我知道我可以用javascript实现这一点,但是否有一个只基于python的解决方案?即使有,javascript是一条出路吗?如果需要的话,我非常愿意学习javascript,但如果没有,我希望继续专注于python 对于这个基本的问题,我很抱歉,但对于web编程,我仍然一无所知Javascript 什么';在web上获取Python脚本输出的最简单方法是什么?,javascript,python,Javascript,Python,我有一个连续运行的python脚本。它每30秒输出2行信息。我希望能够在web上查看此输出。特别是,我希望站点自动更新(每30秒在页面/站点顶部添加一次新输出,而无需刷新页面) 我知道我可以用javascript实现这一点,但是否有一个只基于python的解决方案?即使有,javascript是一条出路吗?如果需要的话,我非常愿意学习javascript,但如果没有,我希望继续专注于python 对于这个基本的问题,我很抱歉,但对于web编程,我仍然一无所知 谢谢 JavaScript是向网站添
谢谢 JavaScript是向网站添加这种互动性的主要方式。您可以使用后端Python,但是客户端必须使用JavaScript AJAX调用来更新页面。Python不在浏览器中运行,因此如果只想使用Python,那就太倒霉了
(也可以使用Flash或Java小程序,但对于看似小问题的解决方案来说,这是一个相当重要的解决方案。)30秒刷新时,您需要某种方式的Javascript。或者,您可以每30秒设置一次元标记刷新以重定向到当前页面,但Javascript路由将防止页面闪烁。您可以使用,但我强烈建议您不要这样做。我只需编写一个简短的Javascript,使用它非常简单
另一种可能性是使用每30秒重新加载一次的iframe,这将阻止整个页面重新加载。如果您想完全用python来完成,可以使用
它直接从python代码生成javascript,因此您可以避免完全自己编写javascript。这是用于真正的Web应用程序吗?或者在浏览器中查看输出是否方便?如果是为了方便起见,你可以考虑使用MODYPython。< /P> mod_python是apachewebserver的扩展,它在web服务器中嵌入了一个python解释器(因此脚本在服务器端运行)。它很容易让你在本地或者为了你自己的方便做这类事情。然后,您可以使用mod python运行脚本,并让处理程序发布结果。您可能也可以轻松地实现刷新,但我不知道如何做到这一点
希望这有助于。。。查看mod_python。一旦你把所有东西都配置好了,情况就不算太糟了。这个问题似乎有两个方面
- 一些花哨的Javascript需要刷新
- 一些花哨的HTML来刷新页面。标签就是你想要的。如果您这样做,您就有了一个全Python的解决方案
将输出写入日志文件,并通过web服务器将日志文件加载到浏览器。如果需要自动刷新,请创建一个带有标记的模板HTML文件,以便每15秒刷新一次:
<META HTTP-EQUIV="refresh" CONTENT="15">
和用于在页面上包含日志文件。如果您想要一种非常简单的方法将数据从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 />")
#/usr/bin/python
导入时间
导入系统
随机输入
def写入(内联=“”):
sys.stdout.write(内联)
sys.stdout.write('\r\n')
sys.stdout.flush()
#无限期打印1到1000之间的随机数字
写入(“内容类型:text/html\r\n”)
i=0
虽然(正确):
i=i+1
时间。睡眠(1)
写(str(i)+“
”)
如果我在浏览器中导航到这一点(Firefox,不知道其他浏览器在缓冲等方面是否会有不同的工作方式),它会连续打印数字。请注意,它是按顺序打印的,因此较新的数据位于底部而不是顶部,但它可能会工作,具体取决于您希望执行的操作
如果这不是您真正想要的,那么唯一的其他方法是自动刷新页面(在iframe中或整个页面中)或使用javascript进行数据获取
您可以在iframe或页面HTML源中使用meta refresh标记,并且您的CGI可以在每次刷新时打印新数据。或者,您可以使用带有XMLHTTPRequest的javascript来读取新数据,而无需进行可视化页面刷新。也许就是您要寻找的
长轮询可以被描述为“HTTP推送”,基本上您有一个(Python)脚本,通过web服务器提供服务,该服务器仅在可用时输出数据。。然后,您尝试通过Javascript异步加载此页面,当失败时,您可以重试,当成功时,您可以处理数据(通常显示数据)
中的示例是用PHP编写的,但实际上只有两个命令(sleep(rand(1,10))
——其他几个命令用于演示javascript的错误处理)
嗯,其实没那么简单。。您不能仅仅通过Apache提供CGI python脚本,因为您将耗尽工作线程,web服务器将无法接受任何进一步的连接。。因此,您需要使用更专业的服务器
- Python框架非常适合这样的服务器——顺便说一下,下面两个服务器都是用它编写的
- -这是“最著名的”长轮询服务器,尽管我在Python实现方面从未有过多少运气
- -使用起来似乎非常简单。。虽然您可以通过HTTP请求与之交互,但它是用Python实现的