2017-08-16 44 views
0

我有一个脚本,它可以像命令行一样工作,但是当我通过浏览器运行时,只有在整个脚本执行完毕后才会给出输出。我是Python新手,我无法知道如何修改打印时的行为。示例...Python脚本只在执行后输出到浏览器

print("Show this") 
time.sleep(10) 
print("Then this") 
time.sleep(10) 
print("And then this") 

在浏览器中,它将等待20秒,然后一次显示整个输出。

谢谢

+6

你能更准确地知道你使用的是什么工具吗? “通过浏览器”是什么意思? – peyo

+0

当然,当我通过浏览器访问脚本并将它指向http://example.com/cgi-bin/script.py时,它会在给出任何输出之前等待20秒 – ShaunG

回答

0

Python缓冲区stdout。所以你可能需要做的是flush它。

from sys import stdout 

print("Show this") 
stdout.flush() 
time.sleep(10) 
print("Then this") 
stdout.flush() 
time.sleep(10) 
print("And then this") 
stdout.flush() 
+1

即使此时它可能会被W​​eb服务器额外缓存如果以CGI运行。部分原因是,如果程序返回错误代码,则Web服务器可能会发送完全不同的错误消息。 –

+0

这个伎俩,非常感谢! – ShaunG

0

其实这是正常的。

当你在你的计算机上运行脚本时(例如通过控制台),输出被发送到标准输出(a.k.a. stdout),你的shell直接在stdout上读取数据。

当您从Web服务器运行脚本时,您的浏览器正在等待一个文件。无论哪种方式,如果您的Web服务器选择一旦计算出您的数据就发送给您(所以您只会得到您的案例中的第一个打印),或者只要脚本具有“缓冲”输出不会退出,无法将整个结果(程序的输出)作为单个文件发送给您。

换句话说,您的Web服务器正在等待您的程序完成向您发送程序的输出。
由于您的程序有2 time.sleep(10),它会等待总计20秒+执行时间(几乎可以忽略)print()调用。

你的问题不是依赖于python,而是更喜欢与web相关。

相关问题