如何在网站上显示实时python脚本输出?

时间:2009-10-25 17:10:54

标签: python ajax cgi web-applications fastcgi

我有一个Python脚本,每两秒钟输出一次,但需要很长时间才能完成。我想建立一个网站,以便有人可以直接调用脚本,并在脚本运行时将输出发送到屏幕。

我不希望用户等到脚本完全完成,因为所有输出都会立即显示。我也试过了,连接总是超时。

我不知道这个过程叫什么,我正在寻找什么术语,以及我需要使用什么。 CGI?阿贾克斯?这里需要一些认真的指导,谢谢!

如果重要,我打算使用Nginx作为网络服务器。

5 个答案:

答案 0 :(得分:2)

首先 - 您的脚本必须输出标题:

  

连接:Keep-Alive

因为浏览器必须知道它必须等待。

您的脚本必须输出数据而不进行缓冲。 stackoverflow有already answered this question

答案 1 :(得分:1)

解决方案是在脚本执行中的选择点刷新输出缓冲区 - 我只是通过flush()在PHP中完成此操作,但这看起来像the Python equivalent

  

cgiprint()也会刷新输出   缓冲区使用 sys.stdout.flush()。最   服务器缓冲脚本的输出   直到它完成。长跑   脚本,8缓冲输出可能   挫败你的用户,谁会想   发生了什么。你也可以   定期冲洗你的缓冲区,或运行   Python处于无缓冲模式。该   执行此操作的命令行选项是-u,   您可以指定为   你的shebang线#!/usr/bin/python -u

答案 2 :(得分:0)

nginx不支持CGI,因此您需要使用fastcgi或wsgi

或者你可以通过nginx

使用类似webpy和代理的东西

答案 3 :(得分:0)

来自http://tools.cherrypy.org/wiki/Comet “维基百科将Comet描述为”,这是一个描述Web应用程序模型的新词,其中一个长期持有的HTTP请求允许Web服务器将数据推送到浏览器,而浏览器没有明确请求它。“。换句话说,Comet是那样的异步Javascript mojo你需要构建非常精美的AJAX应用程序。

以下代码演示了如何使用CherryPy和jQuery编写Comet应用程序。它是控制台ping命令的Web界面。为此示例选择了ping命令,因为如果没有参数,它将无限期地运行。在Web应用程序编程方面,执行永无止境的命令通常是一个很大的禁忌,但使用CherryPy,我们可以很容易地处理这个问题:“SEE LINK

我正在尝试做同样的事情。到目前为止,我使用的是cherrypy,因为它很容易与我的脚本集成。

答案 4 :(得分:0)

正如其他一些人所建议的那样,你可以使用keep alive连接而不是“return”语句使用yield语句而不是“print”语句也使用yield语句。这基本上会将python脚本中发生的所有内容显示在网站页面上。

经过广泛的搜索和测试后,我会建议nginx作为gevent& amp;的逆向代理。瓶子作为后端,让人高枕无忧,因为nginx永远不会提供python源文件。