You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python邮件附件转热敏打印头文件Crontab运行失败排查

问题解决:Crontab启动Python脚本时importlib找不到生成的模块

问题核心

IDE中运行正常,但Crontab开机启动时,生成的.py模块无法被importlib.import_module()找到,触发ModuleNotFoundError。这是因为Crontab执行环境的Python模块搜索路径(sys.path)与IDE环境不一致:默认情况下Crontab的工作目录是用户主目录,而生成的模块文件在脚本所在的/home/badz/Desktop/Codes/目录,不在Python的搜索路径内。

解决方案

方案1:将脚本所在目录添加到Python搜索路径

在qrPrint.py的开头部分添加以下代码,确保生成模块的目录被加入sys.path:

import sys
import os

# 获取当前脚本的绝对路径所在目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 如果该目录不在sys.path中,添加进去
if script_dir not in sys.path:
    sys.path.append(script_dir)

这样无论脚本从哪个目录启动,Python都会搜索当前脚本所在的目录,能找到生成的QR-Code-#45-Vuvu_bytes.py文件。

方案2:修改Crontab执行时的工作目录

修改runCodes.py,先切换到脚本所在目录再执行命令:

import os

# 切换到代码所在目录
os.chdir("/home/badz/Desktop/Codes/")
os.system("python3 FOR-IN-NEW.py &")
os.system("python3 qrPrint.py &")

这样脚本执行时的当前工作目录就是模块生成的目录,Python会默认搜索当前工作目录,自然能找到生成的模块。

额外提示:处理开机网络延迟

错误日志中出现ping: connect: Network is unreachable,说明开机时网络尚未就绪。可以在qrPrint.py中添加网络等待逻辑,避免过早尝试连接邮件服务器:

import time
import socket

def wait_for_network():
    while True:
        try:
            # 尝试连接公共DNS服务器判断网络状态
            socket.create_connection(("8.8.8.8", 53), timeout=5)
            break
        except OSError:
            time.sleep(2)

# 在邮件操作前调用
wait_for_network()

内容的提问来源于stack exchange,提问作者badzzzz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:01:23