0

我有一个调用 python 程序的 PHP 脚本。这是php脚本:

<?php
    $last_line = popen('/Library/Frameworks/Python.framework/Versions/Current/bin/python test.py', 'r');
    $results = fgets($last_line);
    print $results;
?>

这是 test.py 的内容:

test.py:

    import numpy as np
    from matplotlib.patches import Ellipse
    # import matplotlib.pyplot as plt
    # from matplotlib.pyplot import figure, show
    # import pylab 

    print "Hello World!"

现在,这工作正常,我得到“Hello World!” 在浏览器中。但是,如果我取消注释任何导入(即,将 matplotlib.pyplot 导入为 plt,将 matplotlib.pyplot 导入为 plt 或导入 pylab),我不会从 PHP 获得结果。如果有人可以帮助我,那就太好了,因为我需要 Python 中的所有绘图功能。

4

3 回答 3

1

当通过 php 执行 python 脚本时,matplotlib 部分没有被执行。然后我只在我的 .py 文件中包含以下语句..

import os
os.environ[ 'MPLCONFIGDIR' ] = '/tmp/'

import matplotlib

matplotlib.use('agg')

它奏效了……

于 2014-03-15T05:31:04.177 回答
0

感谢 Jan Kuiken 试用!经过艰苦的努力,我终于弄明白了。首先按照此页面中的建议,我将以下内容添加到test.py

import os
os.environ[ 'MPLCONFIGDIR' ] = '/tmp/'
import matplotlib
matplotlib.use('agg')

并导入pylab(即取消注释)。

这在命令行中有效,但在浏览器中无效。然后我做了一个passthru并在浏览器中得到以下错误:

dyld: Symbol not found: __cg_jpeg_resync_to_restart
Referenced from: /System/Library/Frameworks/ApplicationServices...
Expected in: /Applications/MAMP/Library/lib/libjpeg.62.dylib

我发现这应该是 ImageMagick 的问题,并遵循以下页面中的建议: Getting MAMP 1.9 to work with ImageMagick

正确安装后,我能够继续运行 python 代码。python代码有一个命令来绘制和保存图形,我猜在这种情况下需要ImageMagick!

于 2013-03-14T20:57:18.433 回答
0

没有完整的答案,但也许有帮助:

假设您使用的是 Mac OS,我已将您的.php文件更改为:

<br><br>==== Start ====<br><br>

<?php
    error_reporting(E_ALL);

    $handle = popen('python test.py 2>&1', 'r');
    while (($buffer = fgets($handle, 4096)) !== false) {
        echo $buffer."<br>";
    }
    pclose($handle);

?>

<br><br>==== End ====<br><br>

并将.py文件发送到:

import numpy as np
import matplotlib.pyplot as plt

print "Hello World!"

2>&1程序的错误输出重定向到标准输出,这对于调试目的很有用。

浏览器页面上的结果包含:

_get_configdir中的文件“/Library/Python/2.6/site-packages/matplotlib-0.91.1-py2.6-macosx-10.6-universal.egg/matplotlib/init .py”,第 403 行引发 RuntimeError(“创建失败%s/.matplotlib; 考虑将 MPLCONFIGDIR 设置为 matplotlib 配置数据的可写目录"%h) RuntimeError: Failed to create /Library/WebServer/.matplotlib; 考虑将 MPLCONFIGDIR 设置为 matplotlib 配置数据的可写目录

比我以 root 身份做的:

mkdir /Library/WebServer/.matplotlib
chown _www /Library/WebServer/.matplotlib/

并且浏览器中的页面包含为最后一个错误:

文件“/Library/Python/2.6/site-packages/matplotlib-0.91.1-py2.6-macosx-10.6-universal.egg/matplotlib/numerix/ma/init .py”,第 16 行,来自numpy.core .ma import * ImportError: 没有名为 ma 的模块

嗯,这仍然令人失望,但是您的里程可能会有所不同,问题可能与网络服务器用户(_www)的环境/权限有关。

于 2013-03-14T20:42:28.020 回答