从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'
执行计划任务的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