Laravel + Apache的执行Python脚本matplotlib

问题描述:

我使用PHP 7 laravel 5.4,我试图执行使用matplotlib创建一些地块一些Python脚本。Laravel + Apache的执行Python脚本matplotlib

用例:

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 11b的后端,以总比分

import matplotlib 
matplotlib.use('agg') 

print("DONE") 

,但什么都没有改变:通过python sample.py脚本完全在命令行中,其结果是通过执行php test.php正确给出,但在laravel控制器中结果仍然丢失。




我由于是一个小的PHP脚本的exec会做就好了,但在laravel和Apache它很困惑,因为它不是一个PHP的问题并不和它不是文件许可的问题,因为如果脚本不包含matplotlib,则该脚本可以工作。

任何人有我失去了什么什么想法?

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

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

+0

已经安装了Python的只有一个版本,已经选中此:( – ashcrok

+0

尝试写'试试:'你的代码之前和'除例外的错误:打印(错误)'结尾的那段路,让错误是的,它必须打印它 – codeiscool

+0

嗯,你是对的:'没有名为'matplotlib''的模块' – ashcrok