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

Python脚本通过Cron执行时解析配置文件报KeyError问题排查

问题原因及解决办法

核心问题:Cron执行时的工作目录与脚本所在目录不一致

你手动运行脚本时,当前工作目录就是脚本所在的/home/user/,所以config.read('config.ini')能正常找到配置文件;但Cron执行任务时,默认工作目录并不是脚本所在目录,导致用相对路径找不到config.ini,此时config对象是空的,自然会报KeyError找不到section1。

解决方法(任选其一)

  • 方法1:在Python脚本中使用配置文件的绝对路径
    修改读取配置文件的代码,把相对路径换成绝对路径(确保路径和你的实际配置文件位置一致):

    config.read('/home/user/config.ini')
    
  • 方法2:在Cron任务中先切换到脚本目录再执行
    修改Cron任务内容,先切换到脚本所在目录,再运行脚本:

    25 13 * * * cd /home/user && python3 script.py section1
    
  • 方法3:让脚本自动获取自身所在目录(推荐,灵活性高)
    通过Python的os模块获取脚本的绝对路径,再拼接配置文件路径,这样不管在哪里运行脚本都能找到配置文件:

    import sys
    import configparser
    import os
    
    section = sys.argv[1]
    
    # 获取脚本所在目录
    script_dir = os.path.dirname(os.path.abspath(__file__))
    # 拼接配置文件路径
    config_path = os.path.join(script_dir, 'config.ini')
    
    config = configparser.ConfigParser()
    config.read(config_path)
    
    foobar = config[section]['key1']
    

关于你怀疑的引号问题

完全不用担心,Cron里传递section1作为参数的方式是正常的,sys.argv[1]确实能正确拿到'section1'字符串,和手动运行时的参数解析没有区别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:50:22