【问题标题】:QxcbConnection error when Python matplotlib run as cron jobPython matplotlib 作为 cron 作业运行时出现 QxcbConnection 错误
【发布时间】:2017-06-08 10:18:23
【问题描述】:

我有一个计划作为 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))

我通过以下行在 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

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

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

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

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

【问题讨论】:

    标签: python bash matplotlib cron


    【解决方案1】:

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

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

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

    【讨论】:

    • 这可能是正确的答案。我再次删除了我的答案,因为显然你可以ipython启动一个python脚本,只是不建议这样做
    【解决方案2】:

    如果您碰巧在远程工作或使用屏幕将其添加到您的 bashrc:

    export QT_QPA_PLATFORM='offscreen'
    

    【讨论】:

      猜你喜欢
      • 2019-12-31
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      相关资源
      最近更新 更多