2013-03-14 58 views
0

我有一个PHP脚本,在python程序中调用。下面是PHP脚本:PHP和导入pylab

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

,这是test.py内容: “Hello World” 的

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!" 

现在,这工作得很好,我也得到在浏览器中。但是,如果我取消注释任何导入(即导入matplotlib.pyplot作为plt,导入matplotlib.pyplot作为plt或导入pylab),我没有得到PHP的结果。如果有人能够帮助我,那将会很棒,因为我需要Python中的所有绘图功能。

+0

你试过只运行了Python文件没有意见,看看你得到任何错误?我想你没有pylab和其他的安装。 – 2013-03-14 00:15:09

+0

Python代码在终端中工作得很好。我已经安装了它们。 – user2167741 2013-03-14 00:17:51

+0

这个问题的任何帮助? – user2167741 2013-03-14 17:01:54

回答

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将程序的错误输出重定向到标准输出,这可以用于调试目的。

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

File "/Library/Python/2.6/site-packages/matplotlib-0.91.1-py2.6-macosx-10.6-universal.egg/matplotlib/init.py", line 403, in _get_configdir raise RuntimeError("Failed to create %s/.matplotlib; consider setting MPLCONFIGDIR to a writable directory for matplotlib configuration data"%h) RuntimeError: Failed to create /Library/WebServer/.matplotlib; consider setting MPLCONFIGDIR to a writable directory for matplotlib configuration data

比我的根:

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

而不是包含在去年的错误在浏览器的页面:

File "/Library/Python/2.6/site-packages/matplotlib-0.91.1-py2.6-macosx-10.6-universal.egg/matplotlib/numerix/ma/init.py", line 16, in from numpy.core.ma import * ImportError: No module named ma

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

0

感谢Jan Kuiken试用它!经过艰苦的斗争,终于找到了答案。首先如在this page建议,添加以下为 'test.py',

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

和进口pylab(即,未注释的话)。

这从命令行工作,但不在浏览器中。然后,我做了一个中继并得到了在浏览器中出现以下错误:

使dyld:找不到符号:从参考__cg_jpeg_resync_to_restart :/系统/资源库/框架/ ApplicationServices ... 预计在:/应用程序/ MAMP /Library/lib/libjpeg.62.dylib

我想通了,它应该与ImageMagick的问题,其次可以从以下页面的建议: Getting MAMP 1.9 to work with ImageMagick

,正确安装后,我能得到的Python代码正在进行。 python代码有一个命令来绘制和保存图形,我猜ImageMagick在这种情况下是必需的!

0

当python脚本通过php执行时,matplotlib部分没有执行。 然后我就包括我的.py文件下面的语句..

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

import matplotlib 

matplotlib.use('agg') 

和它的工作...