通过crontab运行Python虚拟环境时plt.show()无法显示图表如何解决
问题原因
Crontab执行脚本时处于无图形界面的环境,默认未加载X11显示服务的环境变量,而plt.show()依赖图形界面后端渲染窗口,因此无法正常显示图表。直接在终端运行时,脚本继承了当前桌面会话的DISPLAY环境变量,能找到X服务器,所以可以正常显示。
解决方法
方法1:在Crontab中指定DISPLAY环境变量
修改crontab的执行命令,在Python脚本路径前添加DISPLAY=:0(Ubuntu桌面默认显示编号为:0):
* * * * * DISPLAY=:0 /home/user/Desktop/dailyreports/env/bin/python3 /home/user/Desktop/dailyreports/test.py
方法2:在Python脚本中显式配置显示环境
在导入matplotlib之前,设置DISPLAY变量并指定可用的图形后端:
import os # 指定桌面显示编号 os.environ['DISPLAY'] = ':0' # 设置matplotlib使用支持GUI的后端(比如TkAgg或Qt5Agg) import matplotlib matplotlib.use('TkAgg') import matplotlib.pyplot as plt plt.plot() plt.show(block=True) plt.savefig("/home/user/Desktop/test.png")
补充说明
- 如果
TkAgg后端不可用,可以尝试Qt5Agg或GTK3Agg,这些都是Ubuntu桌面常见的图形后端。 - 若遇到X服务器权限问题,可临时运行
xhost +local:开放本地用户访问权限(不建议长期保持该设置)。
内容的提问来源于stack exchange,提问作者Inglorious_basterd
相关产品推荐
相关产品推荐

