如何实时使用PHP调用python脚本返回结果?

时间:2015-04-12 08:00:19

标签: php python

我使用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)

1 个答案:

答案 0 :(得分:2)

按照规范,exec停止调用程序直到被调用者结束。 之后,您将获得变量中的输出。

如果要在生成数据后立即发送数据,则应使用popen。它将分叉一个新进程,但不会阻塞调用者。因此,您可以执行其他任务,例如循环以逐行读取子流程输出以将其发送到您的客户端。 喜欢的东西:

$handle = popen("python ./some.py ", 'r');
while(!feof($handle)) {
    $buffer = fgets($handle);
    echo "$buffer<br/>\n";
    ob_flush();
}
pclose($handle)