python - 使用 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'])
解决方案
问题在于 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'])
推荐阅读
- react-native - 在解析模块 `react-native/Libraries/NewAppScreen` 时,发现了 Haste 包 `react-native`
- javascript - 在另一个内部创建一个 web 组件并将其附加到另一个上面是不好的做法吗?
- angular - 设置材料表中数组属性中的值
- unit-testing - 有什么方法可以使用 Jest 和 React 测试具有大型数据集的 highcharts。
- mysql - SQL多查询
- data-structures - 每次活动调用的 Power BI 可视化
- reactjs - Visual Studio Code / React - 是否有可能在某处显示所有可能的道具?
- c++ - 如何从文件中检索链表(在 Turbo C++ 中)
- python - Keras 中共享 LSTM 层中的状态持久性
- android - 单击上一个按钮时保留片段的状态