Python Matplotlib子进程/后端问题

Python Matplotlib子进程/后端问题,python,apache,matplotlib,subprocess,backend,Python,Apache,Matplotlib,Subprocess,Backend,我想从作为子进程运行的脚本(由apache服务器上的python cgi脚本启动)中使用matplotlib进行绘图(即编写文件),但不知何故,绘图没有创建,或者服务器崩溃取决于我使用的后端。我想我应该使用“agg”,在这种情况下会创建绘图,但是服务器会崩溃(内部服务器错误)。这是日志: AH01215: /usr/lib/pymodules/python2.7/gtk-2.0/gtk/__init__.py:57: GtkWarning: could not open display, ref

我想从作为子进程运行的脚本(由apache服务器上的python cgi脚本启动)中使用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脚本目前并不依赖于子流程的输出,因此我并没有收到错误的头警告(不启动子流程时也不会出现这种问题)。绘图脚本的开头如下所示:

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:我正在使用Ubuntu11.04和apache2,我怀疑你的绘图脚本将内容输出到stdout,apache将其解释为cgi期望的标题

使用调用脚本时,将输出重定向到dev null,如下所示

from subprocess import Popen, STDOUT
import os

p = Popen(["ls","-l"], stdout=open(os.devnull, "w"), stderr=STDOUT)

太好了-很高兴为您服务!