Python脚本只在执行后输出到浏览器
我有一个脚本,它可以像命令行一样工作,但是当我通过浏览器运行时,只有在整个脚本执行完毕后才会给出输出。我是Python新手,我无法知道如何修改打印时的行为。示例...Python脚本只在执行后输出到浏览器
print("Show this")
time.sleep(10)
print("Then this")
time.sleep(10)
print("And then this")
在浏览器中,它将等待20秒,然后一次显示整个输出。
谢谢
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()
即使此时它可能会被Web服务器额外缓存如果以CGI运行。部分原因是,如果程序返回错误代码,则Web服务器可能会发送完全不同的错误消息。 –
这个伎俩,非常感谢! – ShaunG
其实这是正常的。
当你在你的计算机上运行脚本时(例如通过控制台),输出被发送到标准输出(a.k.a. stdout),你的shell直接在stdout上读取数据。
当您从Web服务器运行脚本时,您的浏览器正在等待一个文件。无论哪种方式,如果您的Web服务器选择一旦计算出您的数据就发送给您(所以您只会得到您的案例中的第一个打印),或者只要脚本具有“缓冲”输出不会退出,无法将整个结果(程序的输出)作为单个文件发送给您。
换句话说,您的Web服务器正在等待您的程序完成向您发送程序的输出。
由于您的程序有2 time.sleep(10)
,它会等待总计20秒+执行时间(几乎可以忽略)print()
调用。
你的问题不是依赖于python,而是更喜欢与web相关。
你能更准确地知道你使用的是什么工具吗? “通过浏览器”是什么意思? – peyo
当然,当我通过浏览器访问脚本并将它指向http://example.com/cgi-bin/script.py时,它会在给出任何输出之前等待20秒 – ShaunG