サブプロセスとして実行されるスクリプト (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 スクリプトはサブプロセスの出力に依存していないため、実際には不良ヘッダーの警告は表示されません (サブプロセスを起動していない場合、そのような問題はありません)。プロット スクリプトの冒頭は次のようになります。
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 を使用しています。