2017-01-23 35 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'