如何从Apache 2提供无缓冲的CGI内容?

Dav*_*gac 7 python perl cgi apache2

我希望能够允许用户在生成长期运行的GCI脚本时查看输出,而不是在脚本完成后查看.但是,即使我明确刷新STDOUT,服务器似乎也等待脚本完成,然后再将响应发送到客户端.这是在运行Apache 2.2.9的Linux服务器上.

示例python CGI:

#!/usr/bin/python

import time
import sys


print "Content-type: text/plain"
print
for i in range(1, 10):
        print i
        sys.stdout.flush()
        time.sleep(1)

print "Done."
Run Code Online (Sandbox Code Playgroud)

perl中的类似示例:

#!/usr/bin/perl

print "Content-type: text/plain\n\n";

for ($i = 1; $i <= 10 ; $i++) {
        print "$i\n";
        sleep(1);
}

print "Done.";
Run Code Online (Sandbox Code Playgroud)

此链接表示从Apache 1.3 CGI输出应该是无缓冲的(但这可能仅适用于Apache 1.x):http://httpd.apache.org/docs/1.3/misc/FAQ-F.html#nph-scripts

有任何想法吗?

Sin*_*nür 4

Randal Schwartz 的文章通过 CGI 观看长进程解释了观看长时间运行进程的不同(恕我直言,更好)的方式。