首页 > 解决方案 > 使用 python 使用 windows 任务调度程序在网络共享上写入文件

问题描述

可能需要使用任务调度程序在windwos 上自动化python 脚本。您可以通过在 Windows 机器上安装 Python 或将脚本冻结为 .exe 文件(例如使用 pyinstaller)来解决此问题。

然而,使用任务调度器有一些陷阱,它们真的很难调试,因为你没有得到标准输出,并且脚本的行为与手动启动时不同。

其中一个问题是写入网络共享。将文件写入映射到驱动器的网络共享时,脚本会停止。您可以通过尝试和错误、打印语句和日志记录找出停止位置,但实际问题并未显示在标准输出中。

如何将文件写入网络共享?以下代码失败:

my_file = "N:\my_folder\my_file.csv"

with open(my_file ,'w') as file:
    writer = csv.writer(file, dialect='excel', delimiter=';', lineterminator= '\r')
    writer.writerow(['Date', 'Value'])

标签: pythonwindows-task-scheduler

解决方案


问题在于 Windows 任务调度程序的性质以及 Windows 如何处理用户会话和网络共享。网络共享是用户会话的一部分,例如。它们是在给定用户登录时创建的。

任务调度程序在用户会话之外运行,因此它无法访问网络共享到驱动器号的映射。您需要使用完全限定的域名和 UNC 路径来访问共享,而不是使用驱动器号。

试试下面的代码:

from pathlib import Path
my_file = Path(r'//192.168.1.123/my_share/my_folder/my_file.csv')    # When no DNS is availiable
my_file = Path(r'//computername/my_share/my_folder/my_file.csv')     # When using DNS

with open(my_file ,'w') as file:
    writer = csv.writer(file, dialect='excel', delimiter=';', lineterminator= '\r')
    writer.writerow(['Date', 'Value'])

推荐阅读