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

3
我有一个Python脚本,每秒或两秒输出一次内容,但是完成整个过程需要很长时间。我想设置一个网站,使得某人可以直接调用该脚本,并在脚本运行时将输出发送到屏幕上。
我不希望用户等待到脚本完全结束,因为这样所有的输出都会一次性显示出来。我也尝试过这样做,但是连接总是超时。
我不知道这个过程被称为什么,我在寻找哪些术语以及我需要使用什么。CGI?Ajax?需要严格的指导,谢谢!
如果重要的话,我计划使用Nginx作为Web服务器。
5个回答

2

首先,你的脚本必须输出头信息:

Connection: Keep-Alive

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

而且你的脚本必须无缓冲地输出数据。StackOverflow已经回答了这个问题


1

解决方案是在脚本执行的某些关键点上刷新输出缓冲区 - 我只在 PHP 中通过 flush() 实现过这一点,但这似乎是 Python 的等效方法

cgiprint() 也使用 sys.stdout.flush() 刷新输出缓冲区。大多数服务器会将脚本的输出缓冲起来直到完成。对于长时间运行的脚本,缓冲输出可能会让用户感到沮丧,不知道发生了什么。您可以定期刷新缓冲区,或者以非缓冲模式运行 Python。命令行选项是 -u,您可以在 shebang 行中指定为 #!/usr/bin/python -u


0

正如其他人建议的那样,您可以使用保持连接和yield语句代替“return”语句以及使用yield语句代替“print”语句。这将基本上显示python脚本中发生的一切到网站页面。

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


0

nginx不支持CGI,所以您需要使用fastcgi或wsgi

或者,您可以使用类似webpy的东西,并通过nginx代理到它


0

来自http://tools.cherrypy.org/wiki/Comet的内容:

维基百科描述Comet为“一种新词,用于描述一种Web应用程序模型,其中长时间保持的HTTP请求允许Web服务器向浏览器推送数据,而无需浏览器明确请求。”。换句话说,Comet是您构建非常花哨的AJAX应用程序所需的异步Javascript技巧。

以下代码演示了如何使用CherryPy和jQuery编写Comet应用程序。它是控制台ping命令的Web界面。选择ping命令作为示例是因为如果不给出参数,它将无限期运行。在Web应用程序编程中执行永无止境的命令通常是大忌,但是使用CherryPy,我们可以轻松处理这个问题:请参见链接。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接