2010-06-05 29 views
0

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

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

任何代碼?或者我們應該猜測你做錯了什麼? – 2010-06-05 07:32:34

回答

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() 
1

import cgitb ; cgitb.enable() 

在腳本的頂部,運行它,並告訴我們回溯。沒有這一點,我們可以提供的唯一幫助就是爲你祈禱。

回溯應該足夠清晰,沒有額外的幫助。

另外,Python cgi速度非常慢,並不是真的可以用於任何非平凡的事情。

0

看來這是Python​​模塊中的一個bug。一個人評論的線

#CFUNCTYPE(c_int)(lambda: None). 

$HOME/lib/python2.7/ctypes/__init__.py

沒有人理解這是什麼意思,這是Windows的一種解決方法,它在Linus cgi中造成麻煩,請參閱Python ctypes MemoryError in fcgi process from PIL library