我有一个绘图脚本,计划作为cron作业运行,但会抛出错误。该脚本是用Python 3.5编写的,下面给出了一个例子。
import pylab as pl
fig = pl.figure(figsize=(4, 4))
ax = fig.add_supblot(111)
ax.plot(range(10), range(10))
我是通过以下行在bash脚本中调用它: 〜/ anaconda3 / bin / ipython test.py
我的cron报告中出现以下错误:
QXcbConnection: Could not connect to display
/datadrive/cronjobs/test.sh: line 2: 1459 Aborted (core dumped) ~/anaconda3/bin/python ~/Desktop/test.py
我甚至尝试直接从crontab调用,但遇到了同样的错误。
我已经确认我可以从终端运行脚本。这两项工作都是:
$ ~/anaconda3/bin/ipython ~/Desktop/test.py
$ bash /datadrive/cronjobs/test.sh
似乎matplotlib不喜欢在cron下运行,但我看不出原因。有谁知道这是为什么以及如何解决它?
答案 0 :(得分:1)
我在SO here上遇到了类似的问题。诀窍是在pylab之前加载matplotlib并调用matplotlib.use(' Agg')。 e.g。
import matplotlib
matplotlib.use('Agg')
import pylab
etc. etc. etc.
显然,当在cron作业下运行时,没有活跃的图形后端(或者某些东西,我真的不理解那部分)。将matplotlib设置为" Agg"解决这个问题。
答案 1 :(得分:0)
如果您正好在远程工作或屏幕上将此添加到您的bashrc:
export QT_QPA_PLATFORM='offscreen'