Я пытаюсь сделать мой анализ данных и отчетов меньше глазных колосков и более графических с автоматически созданных графических файлов, и для этого я играл с matplotlib/pyplot/pylab. Работает блестяще, но когда я пытаюсь запустить его на безголовом сервере...
tkinter.TclError: no display name and no $DISPLAY environment variable
Для этого приложения я использую только PyLab, но после небольшого google я добавил ниже, прежде чем импортировать pylab:
import matplotlib
matplotlib.use("Agg")
Что должно было изменить бэкэнд, но не повлиять.
Любые идеи, что я делаю неправильно?
У удаленной машины есть возможности переадресации X, но поскольку это приложение не должно НЕОБХОДИМО отображать что-либо, я считаю, что обычный ssh -X-хак переполнен.
Примеры: обман Fiendish
Пример рабочего кода на одном компьютере
import matplotlib
matplotlib.use("Agg")
import numpy as np
import pylab as pl
xvals=np.arange(100)
yvals=np.cumsum(np.random.random(100))
yvals[-10:]=0
yvals=np.log(yvals)
pl.close()
pl.plot(xvals,yvals)
pl.xlabel("X")
pl.ylabel("Y")
pl.title("Title")
pl.savefig("testgraph.png")
Нерабочий реальный код
import matplotlib
matplotlib.use("Agg")
import numpy as np
import pylab as pl
import utility as util
import os
... non graph stuff...
def graph_p(self):
pl.close()
channels=range(self.p.shape[0])
for line in range(self.p.shape[1]):
yvals=np.ma.masked_invalid(map(util.watts_to_dbmhz,self.p[:,line]))
pl.plot(channels,yvals) #Error says it occurs here
pl.xlabel("Subchannel Index")
pl.ylabel("Power (dbmhz)")
pl.title("Plot of per-tone power assignments for %d lines"%self.p.shape[1])
pl.savefig(self.dest+self.scenario+'-power.png')
Ничто другое не касается пипота.