包含pyCuda时,shell_exec的输出不再返回给PHP

时间:2013-06-28 10:03:48

标签: php python python-2.7 cuda pycuda

我正在调用这个python文件:

import sys
if __name__ == "__main__":
    print sys.argv[1]

从PHP这样:

$param = "hello";
$result = shell_exec("python /path/to/python/file.py " . $param);
echo $result;

运行PHP文件时显示的是hello。但是,当我将pyCuda(2012.1)导入到python文件中时,输出不再返回给PHP,即使在从bash运行命令时仍然显示它。这是pyCuda导入的python文件:

from pycuda import driver as drv
from pycuda import tools
from pycuda import autoinit
import sys
if __name__ == "__main__":
    print sys.argv[1]

为什么导入pyCuda时PHP不再接收输出?在PHP中读取此python文件的输出的最佳方法是什么?

非常感谢!

1 个答案:

答案 0 :(得分:1)

pycuda.autoinit注册一个atexit自动处理程序来清理它创建的CUDA上下文,以便python代码正常退出。这可能是在没有刷新标准输出的情况下终止应用程序,因此输出永远不会被发出。

所以要么尝试显式刷新stdout:

import sys
print sys.argv[1]
sys.stdout.flush()

或者不要使用pycuda.autoinit并自行处理设置和下拉驱动程序API上下文。