Laravel + Apache 使用 matplotlib 执行 Python 脚本



我正在使用php 7和laravel 5.4,我正在尝试执行一些使用matplotlib来创建一些绘图的python脚本。

用例:

Python 脚本script.py

print("DONE")

命令行输出:

d:workspace>python sample.py
DONE

创建一个小的 php 文件test.php

<?php
exec('sample.py', $output);
print_r($output);
?>

将输出:

d:workspace>php test.php
Array
(
[0] => DONE
)

从 laravel 控制器方法做同样的事情:

public function show_with_file($id, $file)
{
...
// Execute python script to retrieve dot-plot
$command = escapeshellcmd('d:\workspace\sample.py');
exec($command, $output);
dd($output);
...
}

将转储输出:

array:1 [▼
0 => "DONE"
]




到目前为止,一切运行正常。但是,如果我们修改 python 脚本以包含 matplotlib 模块:

import matplotlib
print("DONE")

执行脚本将成功,在命令行中执行test.php文件工作正常,但从Laravel控制器转储输出结果会得到:

[]




注意:

在不同的帖子上阅读了一些关于这个问题的信息,我将 matplot lib 的后端更改为 agg:

import matplotlib
matplotlib.use('agg')
print("DONE")

但没有任何变化:脚本通过python sample.py在命令行中完美运行,结果通过执行php test.php正确给出,但在Laravel控制器中仍然缺少结果。




我很困惑,因为这不是 php 问题,因为一个小的 php exec 脚本可以做得很好,但在 laravel 和 apache 下它没有,也不是文件权限问题,因为如果脚本不包含 matplotlib,它就可以工作。

有人知道我错过了什么吗?

你确定你的Python代码中没有错误吗?

也许PHP正在尝试在未安装matplotlib的Python版本上运行您的代码?

相关内容

  • 没有找到相关文章

最新更新