Python转EXE后任务计划启动报configparser.NoSectionError求助
解决Python打包EXE后任务计划启动找不到config.ini的问题
问题核心原因:os.getcwd()获取的是当前工作目录,而非EXE文件的实际存放目录。双击EXE时,工作目录默认是EXE所在文件夹;但通过Windows任务计划启动时,默认工作目录是系统目录(比如C:\Windows\System32),导致代码找不到同目录下的config.ini。
解决方案1:修改代码获取EXE实际路径
替换原代码中获取目录的逻辑,改为获取EXE文件所在的绝对目录,兼容脚本直接运行和打包后两种场景:
import time import os import subprocess import sys # 新增导入 from configparser import ConfigParser, RawConfigParser # 获取程序所在的实际目录 if getattr(sys, 'frozen', False): # 打包成EXE后的运行环境 thisfolder = os.path.dirname(sys.executable) else: # 脚本直接运行的环境 thisfolder = os.path.dirname(os.path.abspath(__file__)) # 自动拼接配置文件路径,无需手动转义反斜杠 initfile = os.path.join(thisfolder, 'config.ini') config = RawConfigParser() config.read(initfile) check_every_minutes = int(config.get('general_info', 'check_every_minutes').strip()) * 60
解决方案2:修改任务计划的起始目录
如果不想修改代码,可直接在任务计划中指定启动时的工作目录:
- 打开任务计划程序,找到目标任务 → 右键选择「属性」
- 切换到「操作」选项卡,选中启动EXE的操作 → 点击「编辑」
- 在「起始于(可选)」栏中,填入EXE文件所在的文件夹路径(比如
D:\MyApp) - 保存设置后重新运行任务
额外排查技巧
可以在代码中添加日志输出,确认路径是否正确:
# 在获取路径后添加日志写入 with open(os.path.join(thisfolder, "debug.log"), "w", encoding="utf-8") as f: f.write(f"当前工作目录: {os.getcwd()}\n") f.write(f"程序所在目录: {thisfolder}\n") f.write(f"配置文件路径: {initfile}\n")
打包后通过任务计划启动,查看生成的debug.log,就能直观定位路径问题。
内容的提问来源于stack exchange,提问作者Abdellateef
相关产品推荐
相关产品推荐

