You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 09:24:30