Python matplotlib 作为 cron 作业运行时出现 QxcbConnection 错误

tnk*_*epp 3 python bash cron matplotlib

我有一个绘图脚本,计划作为 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))
Run Code Online (Sandbox Code Playgroud)

我通过以下行在 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
Run Code Online (Sandbox Code Playgroud)

我什至尝试直接从 crontab 调用,但得到了同样的错误。

我已确认可以从终端运行该脚本。这两者都有效:

$ ~/anaconda3/bin/ipython ~/Desktop/test.py
$ bash /datadrive/cronjobs/test.sh
Run Code Online (Sandbox Code Playgroud)

似乎 matplotlib 不喜欢在 cron 下运行,但我不明白为什么。有谁知道这是为什么以及如何解决它?

tnk*_*epp 5

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

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

etc. etc. etc.
Run Code Online (Sandbox Code Playgroud)

显然,当在 cron 作业下运行时,没有活动的图形后端(或者其他什么,我不太明白那部分)。将 matplotlib 的 .use 设置为“Agg”可以解决此问题。