我需要使用Python做一些长的过程,这个过程将使用PHP(我的主语言)调用并实时显示结果。
假设这是我的Python脚本(a.py
)。
import time
for x in range(10):
print "S;adasdasd;",x
time.sleep(0.5)
我在网上试了很多例子,但总是得到相同的结果。
PHP总是等到脚本完成后才显示它。
这是我尝试过的众多代码之一。
header( 'Content-type: text/html; charset=utf-8' );
$handle = popen('python folder\\a.py', 'r');
while (!feof($handle)) {
echo fgets($handle);
flush();
ob_flush();
}
pclose($handle);
我错过什么了吗?
最佳答案
PHP总是等到脚本完成后才显示它。
在本例中,这不是PHP的错误;这是因为Python在标准输出到达管道时完全缓冲。幸运的是,Python有一个方便的选项-u
来禁用stdout和stderr缓冲,因此使用
$handle = popen('python -u folder\\a.py', 'r');
解决问题。另请参见Disable output buffering。