执行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 always wait until script is done then displaying it.
在这种情况下,这不是 PHP 的错;这是因为 Python 如果进入管道则完全缓冲其标准输出。幸运的是,Python 有方便的选项 -u
来禁用 stdout 和 stderr 缓冲,所以使用
$handle = popen('python -u folder\a.py', 'r');
问题解决。另见 Disable output buffering。
我需要使用 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 always wait until script is done then displaying it.
在这种情况下,这不是 PHP 的错;这是因为 Python 如果进入管道则完全缓冲其标准输出。幸运的是,Python 有方便的选项 -u
来禁用 stdout 和 stderr 缓冲,所以使用
$handle = popen('python -u folder\a.py', 'r');
问题解决。另见 Disable output buffering。