我使用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的后端更改为agg:
import matplotlib
matplotlib.use('agg')
print("DONE")但是没有什么改变:脚本通过python sample.py在命令行中工作得很好,通过执行php test.php正确地给出了结果,但是在laravel控制器中仍然缺少结果。
我感到困惑,因为它不是php问题,因为一个小php exec脚本会做得很好,但在laravel和apache下,它不是文件许可问题,因为如果脚本不包括matplotlib,脚本就能工作。
有人知道我遗漏了什么吗?
发布于 2017-06-14 13:44:54
您确定Python代码中没有错误吗?
也许PHP试图在没有安装matplotlib的Python版本上运行您的代码?
https://stackoverflow.com/questions/44546408
复制相似问题