2017-01-23 106 views
2

我有一个计划脚本作为cron作业运行,但会引发错误。脚本是用Python 3.5编写的,下面给出了一个例子。Python matplotlib以cron作业运行时出现QxcbConnection错误

import pylab as pl 

fig = pl.figure(figsize=(4, 4)) 
ax = fig.add_supblot(111) 

ax.plot(range(10), range(10)) 

我在bash脚本通过以下行调用它: 〜/ anaconda3 /斌/ 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下运行,但我看不出为什么。有谁知道这是为什么以及如何解决它?

回答

1

我在SO here上遇到过类似的问题。诀窍是在pylab之前加载matplotlib并调用matplotlib.use('Agg')。例如

import matplotlib 
matplotlib.use('Agg') 
import pylab 

etc. etc. etc. 

显然,在cron作业下运行时,没有活动的图形后端(或者其他东西,我不太了解那部分)。将matplotlib的.use设置为“Agg”解决了这个问题。

+1

这可能是正确的答案。我再次删除了我的答案,因为显然你*可以*用'ipython'启动一个python脚本,但是不推荐这么做 – hansaplast

0

如果你碰巧远程工作或WO屏幕添加到您的.bashrc:

export QT_QPA_PLATFORM='offscreen'