如何让monitoring.py脚本持续检测并监控Output_Videos下新增的子文件夹
如何让monitoring.py脚本持续检测并监控Output_Videos下新增的子文件夹
嘿,我完全懂你的困扰——现在你的monitoring.py只在启动那一刻扫描一次Output_Videos下的目录,等script1.py自动生成namevideo2_Output、namevideo3_Output这些新文件夹时,脚本根本没察觉到,自然不会去监控它们下面的Images和Text目录。咱们来修改一下脚本,让它能持续检查新增的目标目录并自动加入监控:
核心思路
- 不再只在启动时获取一次目录,而是定期扫描
Output_Videos下所有符合*/Images和*/Text格式的目录 - 维护一个已监控目录的集合,避免重复添加同一个目录到监控队列
- 把扫描和新增监控的逻辑放到主循环里,每隔几秒执行一次
修改后的完整代码
import time from watchdog.observers import Observer from watchdog.observers.polling import PollingObserver # 导入轮询观察者,适配更多文件系统 from watchdog.events import FileSystemEventHandler from glob import glob class EventHandler(FileSystemEventHandler): def __init__(self, text): self.text = text def on_created(self, event): # 只处理文件创建事件,忽略目录本身的创建(避免重复打印) if not event.is_directory: action, path = (event.event_type, event.src_path) print(self.text.format(path)) def monitor_directories(): # 用PollingObserver更适合需要定期扫描的场景,避免依赖系统文件事件通知 observer = PollingObserver() monitored_dirs = set() # 记录已经监控的目录,防止重复添加 try: while True: # 扫描所有符合条件的目录 image_dirs = glob("Output_Videos/*/Images") text_dirs = glob("Output_Videos/*/Text") all_target_dirs = image_dirs + text_dirs # 遍历所有目标目录,把未监控的加进去 for dir_path in all_target_dirs: if dir_path not in monitored_dirs: # 根据目录类型设置对应的提示文本 if "/Images" in dir_path: text = "处理图片 [Images] : {} 完成" else: text = "处理文本 [Text] : {} 完成" event_handler = EventHandler(text) observer.schedule(event_handler, dir_path, recursive=True) monitored_dirs.add(dir_path) print(f"已开始监控目录: {dir_path}") time.sleep(3) # 每隔3秒扫描一次,可根据需求调整间隔 except KeyboardInterrupt: observer.stop() print("监控已停止") observer.join() if __name__ == "__main__": print("开始监控视频输出目录...\n") monitor_directories()
关键修改点说明
- 去掉了原脚本中只取第一个匹配目录的
[0]操作,改为扫描所有符合格式的目录 - 添加了
monitored_dirs集合,用来跟踪已经加入监控的目录,避免重复注册 - 把目录扫描逻辑放到了主循环里,每隔3秒重新扫描一次(你可以根据实际需求调整这个间隔时间)
- 替换成
PollingObserver,相比默认的Observer,它通过主动轮询的方式检测目录变化,兼容性更好,尤其是在一些网络文件系统或者特殊存储环境下 - 优化了
on_created事件处理,只打印文件创建的信息,避免目录创建时的重复输出
这样修改后,你只需要启动一次monitoring.py,它就会持续盯着Output_Videos目录,不管后续生成多少个新的namevideoX_Output文件夹,都会自动把里面的Images和Text目录加入监控列表啦!
备注:内容来源于stack exchange,提问作者Oussama Gamer
相关产品推荐
相关产品推荐

