Linux Crontab运行PyAutoGUI的问题

在Linux Crontab下运行PyAutoGUI跑不起来,查看日志发现是因为报错 KeyError: 'DISPLAY',也就是找不到显示设备。

用户正常登录了桌面,也没有锁定屏幕,PyAutoGui还是没有找到显示设备,

其实在使用Crontab时,会遇到很多正常操作时不会遇到的问题,比如PHP/Python脚本不能常驻运行,gsettings命令执行无效等,包括PyAutoGui不能正常运行,这是因为Crontab是一个受限的环境,需要额外给它传递环境变量才可以。

就拿PyAutoGUI来说,需要DISPLAYXAUTHORITY这两个变量,跟PATH变量倒没啥关系。

找到了问题所在,解决方法也就出来了。

方法1

写在Shell脚本中,在Python脚本执行前加两行:

export DISPLAY=:0
export XAUTHORITY=/run/user/1000/gdm/Xauthority

方法2

直接写在Python脚本中,放在程序开头

import os
os.environ['DISPLAY'] = ':0'
os.environ['XAUTHORITY']='/run/user/1000/gdm/Xauthority'

这三行要放在程序开头,特别是要在import pyautogui前面!切记!

其中1000是当前用户的id,可通过id命令查看。

方法3

写在profile.bashrc中,不过这个就不推荐了。

至此问题解决,我们就可以在Crontab中运行PyAutoGui任务啦!当然前提是要先登录桌面环境,屏幕没有锁定!

PS:

Windows中的计划任务没有这个问题,可以正常运行PyAutoGUI。

Leave a Comment

豫ICP备19001387号-1