Matplotlib和Pylab在Python CGI中不起作用

时间:2010-06-05 07:14:20

标签: python matplotlib cgi

Matplotlib和Pylab在Python CGI中不起作用。但是相同的组合在Python shell中起作用。 以下是代码:

#!C:/Python26/python
import cgi
import cgitb
import sys
import os
cgitb.enable()

# set HOME environment variable to a directory the httpd server can write to
os.environ[ 'HOME' ] = '/tmp/'

import matplotlib
# chose a non-GUI backend
matplotlib.use( 'Agg' )

import pylab

#Deals with inputing data into python from the html form
form = cgi.FieldStorage()

# construct your plot
pylab.plot([1,2,3])

print "Content-Type: image/png\n"

# save the plot as a png and output directly to webserver
pylab.savefig( "test.png")

3 个答案:

答案 0 :(得分:1)

import cgitb ; cgitb.enable()

在脚本的顶部,运行它并向我们显示回溯。没有它,我们唯一能提供的帮助就是为你祈祷。

回溯应该足够清楚,没有额外的帮助。

除此之外,Python cgi非常慢,并不是你可以用于任何非常重要的事情。

答案 1 :(得分:0)

您的代码有点不完整。就目前而言,您正在将绘图写入服务器硬盘驱动器上的文件。您没有将其返回到浏览器。一种方法是将绘图保存到StringIO对象,然后再将其流回。

import cStringIO
imgData = cStringIO.StringIO()
pylab.savefig(imgData, format='png')

# rewind the data
imgData.seek(0)

print "Content-Type: image/png\n"
print

print imgData.read()

答案 2 :(得分:0)

这似乎是Python ctypes模块中的一个错误。一个人必须评论该行

#CFUNCTYPE(c_int)(lambda: None).
$HOME/lib/python2.7/ctypes/__init__.py中的

没有人理解这意味着什么,这是Windows的一种解决方法,它在Linus cgi中遇到麻烦,请参阅Python ctypes MemoryError in fcgi process from PIL library