2017-01-23 20 views
2

cronジョブとして実行するようにスケジュールされていたが、エラーをスローするプロットスクリプトがあります。このスクリプトはPython 3.5で書かれており、その例を以下に示します。Python matplotlibがcronジョブとして実行されたときにQxcbConnectionエラーが発生しました

私は次の行を経由してbashスクリプトでそれを呼んでいた
import pylab as pl 

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

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

:私は私のcronレポートに次のエラーを得た 〜/ anaconda3/binに/ ipython test.py

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')を呼び出すことです。例えばアクティブなグラフィカルなバックエンドがないcronジョブで実行するとき

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

etc. etc. etc. 

どうやら、(または何かが、私は実際にその部分を理解していません)。 matplotlibの.useを "Agg"に設定すると、これが解決されます。

+1

これはおそらく正しい答えです。私は答えをもう一度削除しました。なぜなら、あなたは 'ipython'でPythonスクリプトを起動することができます – hansaplast

0

リモートで作業したり、画面woのことが起こる場合は、あなたのbashrcにこれを追加するに:

export QT_QPA_PLATFORM='offscreen' 
関連する問題