在Linux Crontab下运行PyAutoGUI跑不起来,查看日志发现是因为报错 KeyError: 'DISPLAY'
,也就是找不到显示设备。
用户正常登录了桌面,也没有锁定屏幕,PyAutoGui还是没有找到显示设备,
其实在使用Crontab时,会遇到很多正常操作时不会遇到的问题,比如PHP/Python脚本不能常驻运行,gsettings
命令执行无效等,包括PyAutoGui不能正常运行,这是因为Crontab是一个受限的环境,需要额外给它传递环境变量才可以。
就拿PyAutoGUI来说,需要DISPLAY
和XAUTHORITY
这两个变量,跟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。