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

使用PHP实时执行shell、获取和显示结果,php,python,shell,real-time,Php,Python,Shell,Real Time,我需要使用Python进行一些长的过程,这将使用PHP(我的主语言)调用,并实时显示结果 假设这是我的Python脚本(a.py) 我在网上尝试了很多例子,但总是得到同样的结果。 PHP总是等到脚本完成后再显示它 这是我尝试过的众多代码之一 header( 'Content-type: text/html; charset=utf-8' ); $handle = popen('python folder\\a.py', 'r'); while (!feof($handle

我需要使用Python进行一些长的过程,这将使用PHP(我的主语言)调用,并实时显示结果

假设这是我的Python脚本(
a.py

我在网上尝试了很多例子,但总是得到同样的结果。 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');

解决了这个问题。另请参见。

尝试在PHP中添加字符集作为标题。请看这里:尝试了,但得到了相同的结果,我更新了问题:使用
fread($handle,1024)怎么样
而不是
fgets
?没有。仍然给我相同的结果,我需要配置我的PHP还是什么?我不确定是否诚实。这可能与
popen
有关,而不是使用
fopen
。您是否可以稍微更改代码以使用
fopen
,并将URL设置为网站,然后逐行输出内容。如果这样做有效,那么问题将出现在
popen
中,而不是您的服务器配置中,因此可能有助于缩小问题范围。长期以来一直在寻找解决方案,这确实解决了问题。真不敢相信事情竟那么简单。
    $handle = popen('python -u folder\\a.py', 'r');