2017-01-23 22 views
2

Ich habe ein Plot-Skript, das als Cron-Auftrag ausgeführt wurde, aber einen Fehler auslöst. Das Skript wurde in Python 3.5 geschrieben und ein Beispiel ist unten angegeben.QxcbConnection-Fehler, wenn Python matplotlib als Cron-Job ausgeführt wird

import pylab as pl 

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

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

Ich war es in einem Bash-Skript über die folgende Zeile Aufruf: ~/anaconda3/bin/ipython test.py

bekam ich folgende Fehlermeldung in meinem cron Bericht:

QXcbConnection: Could not connect to display 
/datadrive/cronjobs/test.sh: line 2: 1459 Aborted (core dumped) ~/anaconda3/bin/python ~/Desktop/test.py 

Ich habe sogar versucht, direkt von der Crontab anrufen, aber habe den gleichen Fehler.

Ich habe bestätigt, dass ich das Skript vom Terminal ausführen kann. Beide funktionieren:

$ ~/anaconda3/bin/ipython ~/Desktop/test.py 
$ bash /datadrive/cronjobs/test.sh 

Es scheint, die Matplotlib mag nicht unter Cron ausgeführt werden, aber ich kann nicht sehen, warum. Weiß jemand, warum das so ist und wie man es repariert?

Antwort

1

Ich stieß auf ein ähnliches Problem auf SO here. Der Trick besteht darin, matplotlib vor pylab zu laden und matplotlib.use ('Agg') aufzurufen. z.B.

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

etc. etc. etc. 

offenbar, wenn es unter einem cron-Job ausgeführt ist keine aktive grafische Backend (oder so, ich verstehe nicht wirklich, dass ein Teil). Das Setzen von Matplotlib .use als "Agg" löst dies.

+1

dies wahrscheinlich die richtige Antwort ist. Ich habe meine Antwort wieder entfernt, weil Sie anscheinend * ein * Python-Skript mit 'ipython' starten können. Es ist einfach nicht zu empfehlen, dies zu tun – hansaplast

0

Wenn Sie zufällig zu arbeiten remote oder wo Bildschirm dies zu Ihrem bashrc hinzufügen:

export QT_QPA_PLATFORM='offscreen' 
Verwandte Themen