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

如何在网站上显示实时python脚本输出?,python,ajax,cgi,web-applications,fastcgi,Python,Ajax,Cgi,Web Applications,Fastcgi,我有一个Python脚本,它每隔一两秒钟输出一次,但需要很长时间才能完全完成。我想建立一个网站,这样有人可以直接调用脚本,并在脚本运行时将输出发送到屏幕 我不希望用户等到脚本完全完成,因为这样所有的输出都会立即显示出来。我也试过了,但连接总是超时 我不知道这个过程叫什么,我在寻找什么术语,我需要使用什么。CGI?AJAX这里需要一些认真的指导,谢谢 如果有必要,我计划使用Nginx作为Web服务器。解决方案是在脚本执行过程中的选择点刷新输出缓冲区-我只在PHP中通过flush这样做过,但这看起来

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

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

我不知道这个过程叫什么,我在寻找什么术语,我需要使用什么。CGI?AJAX这里需要一些认真的指导,谢谢


如果有必要,我计划使用Nginx作为Web服务器。

解决方案是在脚本执行过程中的选择点刷新输出缓冲区-我只在PHP中通过flush这样做过,但这看起来像:

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


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


或者,您也可以通过nginx使用类似于和代理的方法,首先-您的脚本必须输出标题:

连接:保持活力

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

您的脚本必须在不缓冲的情况下输出数据。而stackoverflow已经从 Wikipedia将Comet描述为一个新词,用于描述一个web应用程序模型,在该模型中,长期持有的HTTP请求允许web服务器将数据推送到浏览器,而浏览器不显式地请求数据。。换句话说,Comet是构建真正奇特的AJAX应用程序所需的异步Javascript mojo

下面的代码演示了如何使用CherryPy和jQuery编写Comet应用程序。它是一个进入控制台ping命令的web界面。本例选择ping命令是因为如果没有参数,它将无限期运行。当涉及到web应用程序编程时,执行永无止境的命令通常是一个很大的禁忌,但是使用CherryPy,我们可以很容易地处理这个问题:参见链接


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

正如其他一些人所建议的,您可以使用保持活动连接,使用yield语句代替return语句,也可以使用yield语句代替print语句。这将基本上在网站页面上显示python脚本中发生的一切

经过广泛的搜索和测试后,我建议将nginx作为反向代理,以gevent&ball作为后端,这样就可以放心了,因为nginx永远不会提供python源文件