执行shell,使用PHP实时获取和显示结果


Execute shell, get and display result realtime using PHP

我需要使用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来禁用标准输出和标准错误缓冲,所以使用

    $handle = popen('python -u folder''a.py', 'r');

解决了这个问题。另请参见禁用输出缓冲