PHP和导入pylab

时间:2013-03-14 00:12:39

标签: php macos import matplotlib fgets

我有一个调用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的所有绘图功能。

3 个答案:

答案 0 :(得分: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将程序的错误输出重定向到标准输出,这可用于调试目的。

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

  

文件   “/Library/Python/2.6/site-packages/matplotlib-0.91.1-py2.6-macosx-10.6-universal.egg/matplotlib/init.py”   第403行,在_get_configdir中引发RuntimeError(“无法创建   %S / .matplotlib;考虑将MPLCONFIGDIR设置为可写目录   对于matplotlib配置数据“%h”RuntimeError:无法创建   /Library/WebServer/.matplotlib;考虑将MPLCONFIGDIR设置为a   matplotlib配置数据的可写目录

比我根本做的那样:

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:没有命名的模块   毫安

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

答案 1 :(得分:0)

感谢Jan Kuiken试用它!经过艰苦的努力,我终于明白了。首先在this page中建议,我将以下内容添加到'test.py',

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

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

这可以从命令行运行,但不能在浏览器中运行。然后我做了一个 passthru 并在浏览器中收到以下错误:

dyld:未找到符号:__ cg_jpeg_resync_to_restart 引自:/ System / Library / Frameworks / ApplicationServices ... 预期在:/Applications/MAMP/Library/lib/libjpeg.62.dylib

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

正确安装后,我能够获得python代码。 python代码有一个绘制和保存图形的命令,我想在这种情况下需要ImageMagick!

答案 2 :(得分:0)

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

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

import matplotlib

matplotlib.use('agg')

它有效......