Javascript 什么';在web上获取Python脚本输出的最简单方法是什么?

Javascript 什么';在web上获取Python脚本输出的最简单方法是什么?,javascript,python,Javascript,Python,我有一个连续运行的python脚本。它每30秒输出2行信息。我希望能够在web上查看此输出。特别是,我希望站点自动更新(每30秒在页面/站点顶部添加一次新输出,而无需刷新页面) 我知道我可以用javascript实现这一点,但是否有一个只基于python的解决方案?即使有,javascript是一条出路吗?如果需要的话,我非常愿意学习javascript,但如果没有,我希望继续专注于python 对于这个基本的问题,我很抱歉,但对于web编程,我仍然一无所知 谢谢 JavaScript是向网站添

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

我知道我可以用javascript实现这一点,但是否有一个只基于python的解决方案?即使有,javascript是一条出路吗?如果需要的话,我非常愿意学习javascript,但如果没有,我希望继续专注于python

对于这个基本的问题,我很抱歉,但对于web编程,我仍然一无所知


谢谢

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。一旦你把所有东西都配置好了,情况就不算太糟了。

这个问题似乎有两个方面

  • 在网络上进行演示。这在Python中很容易做到——使用Django或TurboGears或任何基于Python的web框架

  • 刷新网页以显示新数据。这可以通过两种方式实现

    • 一些花哨的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实现的

    这被称为Comet,但它不能保证适用于所有浏览器。(而且可能存在超时问题。)所有好的方面,它实际上只是取决于OP所寻找的细节。我猜少量的javascript将是更好的解决方案