Matplotlib и Pylab не работают в Python CGI

Matplotlib и Pylab не работают в Python CGI. Но та же комбинация работает в оболочке Python. Ниже приведен код:

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

person Nimmy    schedule 05.06.2010    source источник
comment
Любой код? Или мы должны догадаться, что вы делаете неправильно?   -  person Ignacio Vazquez-Abrams    schedule 05.06.2010


Ответы (3)


Ваш код немного неполный. В нынешнем виде вы записываете сюжет в файл на жестком диске сервера. Вы не возвращаете его в браузер. Один из способов сделать это — сохранить график в объекте 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()
person Mark    schedule 07.06.2010

Помещать

import cgitb ; cgitb.enable()

вверху вашего скрипта, запустите его и покажите нам трассировку. Без этого единственная помощь, которую мы можем оказать, — это молиться за вас.

На самом деле трассировка должна быть достаточно ясной без дополнительной помощи.

Кроме того, Python cgi чрезвычайно медленный и не совсем то, что вы можете использовать для чего-то нетривиального.

person Noufal Ibrahim    schedule 05.06.2010

Кажется, это ошибка в модуле Python ctypes. Нужно прокомментировать строку

#CFUNCTYPE(c_int)(lambda: None).

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

Никто не понимает, что это значит, это обходной путь для Windows, который создает проблемы в Linus cgi, см. Python ctypes MemoryError в процессе fcgi из библиотеки PIL.

person Yaroslav Nikitenko    schedule 20.04.2012