我使用PHP成功调用python脚本并得到了结果。但我必须等待脚本运行结束而没有任何输出。它看起来对我的客户不友好。
如何实时将脚本结果返回给PHP网站?
例如,对于下面的代码,我希望PHP Web会实时显示输出消息,而不是在最后显示它们。我该如何更改我的代码? 谢谢。
PHP代码:
<?php
$k = $_REQUEST['k'];
if (!empty($k))
{
$k = trim($k);
$a = array();
exec('python ./some.py '.$k, $a);
echo $a[0];
}
?>
Python代码:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import sys
def do_some(a):
print 'test1'
time.sleep(30)
print 'test2'
if __name__ == '__main__':
print 'Now the python scritp running'
time.sleep(20)
a = sys.argv[1]
if a:
print 'Now print something'
T = do_some(a)
答案 0 :(得分:2)
按照规范,exec
停止调用程序直到被调用者结束。 在之后,您将获得变量中的输出。
如果要在生成数据后立即发送数据,则应使用popen
。它将分叉一个新进程,但不会阻塞调用者。因此,您可以执行其他任务,例如循环以逐行读取子流程输出以将其发送到您的客户端。 喜欢的东西:
$handle = popen("python ./some.py ", 'r');
while(!feof($handle)) {
$buffer = fgets($handle);
echo "$buffer<br/>\n";
ob_flush();
}
pclose($handle)