从python脚本移植到windows的计划任务上遇到的坑

此贴是记录 在jupyter和用cmd调取py文件(比如python D:\工作文件\测试\tmp.py)都能正常运行的脚本,但放到计划任务里却不能正常运行的问题。

一、使用映射盘的文件

背景:W盘是你在windows已经建立映射的盘,而你的python脚本中有调用到这个盘的文件,

例子:

import os 

file_list=["W:/SA_file/"+file for file in os.listdir("W:/SA_file") if "202001" in file]

在计划任务里执行该脚本,会报错:FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'W:/SA_file'

从python脚本移植到windows的计划任务上遇到的坑

执行计划任务的bat文件命令如下:

set tmp=%date:~0,10%
set datevar=%tmp:/=-%
set jiaoben=E:\Desktop\工作文件\测试\tmp.py
set log_path=E:\Desktop\工作文件\测试\log
python %jiaoben% > %log_path%\log_%datevar%.txt 2> %log_path%\error_%datevar%.txt
exit

原因:

        计划任务不认你所建立的网络映射盘,需要在命令行重新指定。

解决方法:

        在执行计划的bat文件加入建立网络映射盘的指令。

PS:建立网络映射盘的指令:

假定有一台机器的IP为192.168.88.31,在这台机器上有一个共享文件夹,它的共享名称为Share,而且可以使用用户名balabala登录,user的密码为ohmygod,那么将这个网络文件夹映射为本地的W:盘的命令如下:
net use W: \\192.168.88.31\Share ohmygod /USER:balabala

最终bat代码:

net use W: \\192.168.88.31\Share ohmygod /USER:balabala
set tmp=%date:~0,10%
set datevar=%tmp:/=-%
set jiaoben=E:\Desktop\工作文件\测试\tmp.py
set log_path=E:\Desktop\工作文件\测试\log
python %jiaoben% > %log_path%\log_%datevar%.txt 2> %log_path%\error_%datevar%.txt
net use W: /del
exit

PS:为了能再次执行不报错,所以此次建立的网络映射要删除,于是要执行net use W: /del