Windows计划任务运行Python脚本时数据存储至错误目录问题
问题原因
Windows计划任务执行程序时,默认的工作目录为C:\Windows\System32,而非脚本自身所在的目录。
你的代码中所有文件存储路径均使用相对路径编写:sqlite数据库连接的NW.db、截图存储用的save_path=r'.'、文件夹创建路径,全部是基于程序运行时的当前工作目录解析。手动在脚本所在目录运行时,当前工作目录就是脚本文件夹,存储路径正常;计划任务触发运行时,工作目录默认指向System32,所有生成的文件、文件夹就会被错误存到该路径下。
解决方法
三种方案任选其一即可:
- 方案1:修改触发脚本用的批处理文件,执行Python命令前先切换工作目录到脚本所在文件夹,修改后的批处理代码如下:
@echo off cd /d "C:\Users\Administrator\Desktop\Python_Kishen" "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\python.exe" "NW_offer.py" pause
其中
/d参数用于保证跨盘符切换目录时命令正常生效,切换目录后所有相对路径的解析逻辑和手动在脚本目录运行完全一致。
- 方案2:修改Python脚本代码,将所有相对路径替换为基于脚本自身位置的绝对路径,从根源避免工作目录变动带来的路径错误,核心修改参考:
import os # 获取当前脚本所在的绝对目录 SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__)) # 数据库使用绝对路径连接 connection = sqlite3.connect(os.path.join(SCRIPT_PATH, 'NW.db')) base_folder = os.path.join(SCRIPT_PATH, f'nw_{req[1]}') if not os.path.exists(base_folder): os.mkdir(base_folder) folder = os.path.join(base_folder, Hire_Start) if not os.path.exists(folder): os.mkdir(folder) # 截图存储使用拼接后的绝对路径 img_name = f"NW_{req[1]}_{days3}_{Hire_Start}.jpg" ss.full_Screenshot(driver, save_path=folder, image_name=img_name)
额外说明:原代码中用硬编码反斜杠
\拼接路径容易出现转义问题,使用os.path.join拼接路径会自动适配Windows系统的路径分隔符,稳定性更高;原代码中重复判断创建nw_{req[1]}文件夹的逻辑属于冗余代码,可以直接删除。
- 方案3:直接修改Windows计划任务配置,编辑对应任务的操作项,在「起始于(可选)」输入框中填入脚本所在目录路径
C:\Users\Administrator\Desktop\Python_Kishen,保存后计划任务运行时会自动将该目录作为工作目录,无需修改脚本或批处理文件。
内容的提问来源于stack exchange,提问作者Kishen
相关产品推荐
相关产品推荐

