我想从作为子进程运行的脚本(由来自 apache 服务器的 python cgi-script 启动)的脚本中使用 matplotlib 绘制(即编写文件),但不知何故,要么没有创建情节,要么服务器崩溃,具体取决于我使用的后端。我认为我应该使用“agg”,并且在这种情况下创建了情节,但是服务器随后崩溃(内部服务器错误)。这是日志:
AH01215: /usr/lib/pymodules/python2.7/gtk-2.0/gtk/__init__.py:57: GtkWarning: could not open display, referer: http://localhost/
AH01215: warnings.warn(str(e), _gtk.Warning), referer: http://localhost/
AH01215: /usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_gtk.py:49: GtkWarning: IA__gdk_cursor_new_for_display: assertion `GDK_IS_DISPLAY (display)' failed, referer: http://localhost/
AH01215: cursors.MOVE : gdk.Cursor(gdk.FLEUR),, referer: http://localhost/
malformed header from script 'submit.cgi': Bad header: ['/home/user/..., referer: http://localhost/
cgi-script 目前不依赖于子进程的输出,所以我并没有真正得到 bad-header 警告(不启动子进程时没有这样的问题)。情节脚本的开头如下所示:
import string
import sys
import os
from math import *
import tempfile
os.environ['MPLCONFIGDIR'] = tempfile.mkdtemp()
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as matplot
from matplotlib import mpl
到目前为止,我只使用 matplotlib 进行了相当简单的绘图,而不是作为子进程,所以我非常感谢你的帮助。
PS:我使用的是 ubuntu 11.04 和 apache2