You need to enable JavaScript to run this app. 树莓派Python3用logging写日志触发两类报错的排查与解决
优惠活动
大模型
产品
解决方案
定价
更多

树莓派Python3用logging写日志触发两类报错的排查与解决

报错原因拆解
  • 第一类FileNotFoundError触发原因
    1. Python 3.7版本的logging模块在配置文件日志时,FileHandler逻辑仅会直接尝试打开最终指定的日志文件,不会自动递归创建路径中缺失的上级目录。从堆栈信息可以看到,实际运行的test.py第641行,明确指定日志目标是/var/log/morning/RER-execution-logs.txt,只要/var/log/morning这层目录不存在,模块就会直接抛出文件不存在的错误。
    2. 你最初看到的日志配置语句写的路径是/Desktop/var/log/...,本质是绝对路径写法错误:以斜杠开头的路径会直接从系统根目录开始匹配,既不会找到你桌面上的内容,也不会自动拼接/home/pi的用户路径,这也是你实际运行时看不到对应日志写入桌面的核心原因。
  • 第二类PermissionError触发原因
    树莓派系统默认将/var/log设为系统级日志专属目录,目录本身归属root用户、配置了严格的读写权限管控。你能手动在该目录下创建morning子目录,基本是通过sudo临时提权完成操作的,此时创建出来的目录、后续生成的日志文件属主都是root;而你日常运行Python脚本时使用的是普通pi用户身份,没有root属主目录的写入权限,因此触发权限拒绝报错。
对应解决方案
  • 方案1(最省事,无额外权限配置):更换日志存储路径
    把日志文件改到当前登录用户有完全读写权限的家目录下,比如/home/pi/Desktop/RER-execution-logs.txt,从根源避开系统目录的权限限制。
    注意路径写法不要出错:不要写绝对路径/Desktop/xxx,正确的桌面路径必须带上家目录前缀/home/pi/,否则系统还是会从根目录匹配不存在的/Desktop文件夹。
  • 方案2(保留/var/log存储路径,无需每次提权跑脚本):调整日志目录归属
    通过命令预先完成目录创建和权限调整,让普通用户对专属日志目录有写入权限:
    1. 创建日志目录:sudo mkdir -p /var/log/morning
    2. 将目录属主修改为日常运行脚本的普通用户:sudo chown pi:pi /var/log/morning(树莓派默认普通用户为pi,执行该命令即可)
  • 方案3(代码层面规避,避免手动建目录):配置日志前自动创建父目录
    不管最终选择哪个存储路径,都可以在logging.basicConfig之前加入目录创建逻辑,从代码层面避免路径缺失问题,示例代码:
    import os
    import logging
    
    log_target = "/var/log/morning/RER-execution-logs.txt"
    # 递归创建日志文件的上级目录,目录已存在时不触发报错
    os.makedirs(os.path.dirname(log_target), exist_ok=True)
    
    logging.basicConfig(
        filename=log_target,
        format='%(levelname)s:%(asctime)s:%(message)s',
        level=logging.INFO
    )
    
  • 临时应急方案:运行脚本时加sudo提权,以root身份执行脚本即可获得/var/log目录的写入权限,但不推荐长期使用,过高的运行权限可能带来不必要的安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 19:27:07