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")
答案 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。