Watchdog库可监控目录变更并自动上传XML文件:安装watchdog及平台依赖,编写继承FileSystemEventHandler的处理器,在on_created中校验.xml文件、延时等待写入完成、检查文件大小后用requests上传。

如果您希望在文件系统中检测到特定目录的变更后自动处理并上传XML文件,Watchdog库是一个专为监控文件系统事件设计的Python工具。以下是使用Watchdog实现该目标的具体方法:
一、安装Watchdog库
Watchdog依赖于操作系统底层的文件监控机制(如Linux的inotify、macOS的FSEvents、Windows的ReadDirectoryChangesW),需先通过pip安装核心包及可选的额外依赖以支持不同平台的高效事件捕获。
1、打开终端或命令提示符。
2、执行安装命令:pip install watchdog。
立即学习“Python免费学习笔记(深入)”;
3、若在Linux系统上需要更高性能,可额外安装:pip install inotify。
二、编写基础监控脚本
创建一个Python脚本,利用Observer监听指定路径,使用FileSystemEventHandler子类响应文件创建、修改等事件,并在检测到XML文件生成时触发上传逻辑。
1、导入必要模块:from watchdog.observers import Observer、from watchdog.events import FileSystemEventHandler、import os, time。
2、定义事件处理器类,继承FileSystemEventHandler,在on_created方法中判断文件扩展名是否为.xml。
3、在该方法内添加条件判断:if file_path.lower().endswith('.xml'),满足则执行后续上传操作。
三、集成HTTP上传功能
当XML文件被创建后,需通过HTTP协议将其发送至指定服务器端点。可选用requests库完成POST请求,确保服务端能接收multipart/form-data或raw XML格式数据。
1、在脚本开头添加:import requests。
2、在事件处理器中构造上传请求:with open(file_path, 'rb') as f: response = requests.post('https://your-api.com/upload', files={'file': f})。
3、检查响应状态码:if response.status_code == 200,表示上传成功;否则记录错误日志。
四、使用线程安全方式避免重复上传
文件系统事件可能因编辑器保存行为被多次触发(如先创建空文件再写入内容),直接在on_created中上传可能导致失败或重复提交,需引入延迟与存在性校验机制。
1、在事件处理器中调用time.sleep(0.5),等待文件写入完成。
2、再次检查文件是否存在且大小大于0:if os.path.exists(file_path) and os.path.getsize(file_path) > 0。
3、仅在此条件下执行上传逻辑,防止空文件或未就绪文件被提交。
五、配置监控路径与启动观察器
Observer实例需绑定事件处理器并指定监控路径,启动后将持续运行,因此主程序需保持活动状态,通常采用阻塞式等待或后台线程方式维持生命周期。
1、初始化观察器:observer = Observer()。
2、将自定义处理器与路径关联:observer.schedule(event_handler, path='/path/to/watch', recursive=False)。
3、启动观察器:observer.start(),随后使用try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop()维持运行并支持中断退出。









