首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel + Apache用matplotlib执行Python脚本

Laravel + Apache用matplotlib执行Python脚本
EN

Stack Overflow用户
提问于 2017-06-14 13:35:55
回答 1查看 635关注 0票数 0

我使用php 7和laravel 5.4,并尝试执行一些使用matplotlib创建一些情节的python脚本。

用例:

Python script.py

代码语言:javascript
复制
print("DONE")

命令行输出:

代码语言:javascript
复制
d:\workspace>python sample.py
DONE

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

代码语言:javascript
复制
<?php
exec('sample.py', $output);
print_r($output);
?>

将产出:

代码语言:javascript
复制
d:\workspace>php test.php
Array
(
    [0] => DONE
)

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

代码语言:javascript
复制
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);

    ...
}

将转储输出:

代码语言:javascript
复制
array:1 [▼
  0 => "DONE"
]

到现在为止一切都很顺利。但是,如果我们修改python脚本以包含matplotlib模块:

代码语言:javascript
复制
import matplotlib

print("DONE")

执行脚本将是成功的,在命令行中执行test.php文件可以正常工作,但是从Laravel控制器转储输出结果会给出如下结果:

代码语言:javascript
复制
[]

注意:

在不同的帖子中读到了一些关于这个问题的文章,我将matplot的后端更改为agg:

代码语言:javascript
复制
import matplotlib
matplotlib.use('agg')

print("DONE")

但是没有什么改变:脚本通过python sample.py在命令行中工作得很好,通过执行php test.php正确地给出了结果,但是在laravel控制器中仍然缺少结果。

我感到困惑,因为它不是php问题,因为一个小php exec脚本会做得很好,但在laravel和apache下,它不是文件许可问题,因为如果脚本不包括matplotlib,脚本就能工作。

有人知道我遗漏了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-14 13:44:54

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44546408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档