crontab 是 linux 系统中的计划任务命令,可以用来执行定时任务。与 windows 系统的计划任务类似。
当通过 crontab 运行以下脚本时会出错
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
map = Basemap()
map.drawcoastlines()
plt.savefig('out.png')
错误与下面提示类似:
RuntimeError: could not open displayX
这是因为 matplotlib 假设使用 plt.show() 命令时只有激活 X 服务器才能打开窗口绘图。
为了避免此问题,可以导入 pyplot
import matplotlib as mpl
mpl.use('Agg')
使用 cron 运行以下脚本就不会出错了
from mpl_toolkits.basemap import Basemap
import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
map = Basemap()
map.drawcoastlines()
plt.savefig('out.png')
除了 Agg 后端之外,pdf, ps, svg, agg, cairo, gdk 等后端都支持无 X Server 使用,使用这些后端时可能需要安装额外的库。 更改 .matplotlibrc 文件中的相应参数可以改变默认后端。
stackoverflow 上对此问题有更好的解释 [注1]。
注1:http://stackoverflow.com/questions/4931376/generating-matplotlib-graphs-without-a-running-x-server