0

我正在调用这个 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 文件的输出的最佳方法是什么?

非常感谢!

4

1 回答 1

1

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

所以要么尝试显式刷新标准输出:

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

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

于 2013-06-28T12:00:09.113 回答