Python cgi脚本仅在完成后才在浏览器中显示输出

时间:2013-05-01 11:05:24

标签: python cgi

我注意到python cgi脚本只在完成执行后显示输出,有没有办法,我可以让脚本继续执行并不断打印结果。我发现如果我在Apache中运行脚本“abc.py”,则会连续显示输出(脚本继续执行),但是从另一个脚本调用脚本时不起作用。

以下是代码: - (abc.py)

import sys, time
#sys.stdout.write('Content-Type: text/html;charset=utf-8\r\n\r\n')

#print '<html><body>'
for i in range(10):
    print '<div>%i</div>'%i
    sys.stdout.flush()
    time.sleep(1)

我想从另一个CGI脚本运行此脚本。现在,当我调用此脚本时(在Apache中使用下面的脚本),输出仅在完成后打印。有没有办法解决它。

print 'Content-Type: text/html;charset=utf-8\r\n\r\n'
print '<html><body>'

PIPE = subprocess.PIPE
pd = subprocess.Popen(['abc.py'],
  stdout=PIPE, stderr=PIPE)
stdou, stder = pd.communicate()
sys.stdout.write(stdou)
sys.stdout.flush()

1 个答案:

答案 0 :(得分:2)

工作代码

abc.py

#!/grid/common/bin/python
import sys, time

for i in range(10):
    print str(i)
    sys.stdout.flush()
    time.sleep(1)

主要脚本

#!/grid/common/bin/python
import sys, time
import subprocess
import cgi, cgitb
cgitb.enable()

print 'Content-Type: text/html;charset=utf-8\r\n\r\n'

print '<html><body>'

PIPE = subprocess.PIPE
pd = subprocess.Popen(['abc.py'],
                        stdout=PIPE, stderr=PIPE)
while True:
    output = pd.stdout.read(1)
    if output == '' and pd.poll() != None:
      break
    if output != '':
      sys.stdout.write(output)
      sys.stdout.flush()