Crontab运行Python脚本时Telegram Bot无法读取本地PNG文件怎么办?
解决crontab运行Python脚本时Telegram Bot无法读取本地图片的问题
1. 修复代码的模块缺失问题
你的代码里用到了os.path.abspath但没导入os模块,这会直接触发运行错误,先补上导入语句:
import os import telegram chat_id = '***' BOT_TOKEN = '***' bot = telegram.Bot(token=BOT_TOKEN) bot.sendPhoto(photo=open(os.path.abspath('./github/project/photo.png'), 'rb'), chat_id=chat_id)
2. 用绝对路径替代相对路径
crontab执行任务时的默认工作目录是用户主目录,相对路径容易出现解析偏差,最稳妥的方式是直接写图片的完整绝对路径:
# 替换成你图片的真实绝对路径,可通过终端执行 realpath ~/github/project/photo.png 获取 photo_path = '/home/yourname/github/project/photo.png' bot.sendPhoto(photo=open(photo_path, 'rb'), chat_id=chat_id)
3. 检查文件权限
确保执行crontab的用户(也就是你的账号)对图片文件和所在目录有读取权限:
# 给图片添加读取权限 chmod +r ~/github/project/photo.png # 确保目录有访问权限 chmod +x ~/github/project/
4. 排查crontab执行环境
可以在脚本开头加入环境信息输出,方便定位问题:
import os print("当前工作目录:", os.getcwd()) print("环境变量PATH:", os.environ.get('PATH'))
之后查看日志~/log/output.log,确认工作目录和路径是否符合预期。
5. 避免在crontab中使用波浪号~(可选)
部分场景下crontab对波浪号的解析不如终端准确,建议把crontab配置里的路径改成完整绝对路径,比如将~/github/project/test.py替换为/home/yourname/github/project/test.py。
内容的提问来源于stack exchange,提问作者charlielai
相关产品推荐
相关产品推荐

