views:

173

answers:

2

Hi all,

Matplotlib and pylab doesn't work in python cgi. but it's working properly in python shell.. Any one can help me....... Plz.......

Thanks in advance......

#!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")
+1  A: 

Put

import cgitb ; cgitb.enable()

at the top of your script, run it and show us the traceback. Without that the only help we can provide is to pray for you.

The traceback should be clear enough without extra help really.

An aside, Python cgi is extremely slow and not really something you can use for anything non trivial.

Noufal Ibrahim
A: 

Your code is a little incomplete. As it stands you are writing the plot to a file on the servers hard-drive. You are not returning it to the browser. One method to do this is to save the plot to a StringIO object and then stream it back.

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