Matplotlib:在 CGI 脚本中使用 matplotlib¶
日期 | 2006-11-04(上次修改),2006-01-22(创建) |
---|
尝试在 Python CGI 脚本中天真地使用 matplotlib 很可能会导致以下错误
In [ ]
...
352, in _get_configdir
raise RuntimeError("'%s' is not a writable dir; you must set
environment variable HOME to be a writable dir "%h)
RuntimeError: '<WebServer DocumentRoot>' is not a writable dir; you must set
environment variable HOME to be a writable dir
Matplotlib 需要环境变量 HOME 指向一个可写目录。一种方法是在运行时从 CGI 脚本中设置此环境变量(另一种方法是修改文件,但这不那么便携)。以下模板可用于使用 matplotlib 创建 png 图像的 cgi
In [ ]
#!/usr/bin/python
import os,sys
import cgi
import cgitb; 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( sys.stdout, format='png' )
然后可以使用以下 URL 访问此图像:http://localhost/showpng.py
如文档所述,某些后端不允许将输出发送到 sys.stdout。可以将最后一行替换为以下内容以解决此问题
In [ ]
pylab.savefig( "tempfile.png", format='png' )
import shutil
shutil.copyfileobj(open("tempfile.png",'rb'), sys.stdout)
(当然,在生产环境中使用它,需要创建和删除合适的临时文件。)
章节作者:AndrewStraw,Unknown[120],Unknown[121]