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

如何用watchdog监控指定AVI文件并运行对应Python脚本

多目录特定AVI文件监控与脚本触发实现

针对你的需求,我们可以通过扩展原有代码,实现多目录、多规则的监控逻辑,具体修改如下:

核心修改点

  • 用规则映射表统一管理监控路径、目标AVI文件、对应执行脚本的关联关系
  • 让监控器支持同时注册多组监控规则,每组规则对应独立的事件处理器
  • 事件处理器根据触发的文件信息,自动匹配并执行对应的脚本
  • 保留递归监控参数,确保子目录的AVI文件也能被捕获

完整实现代码

import time
import subprocess
import sys
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler

class RuleHandler(PatternMatchingEventHandler):
    def __init__(self, target_script):
        super().__init__(
            patterns=["*.avi"],
            ignore_patterns=["*.tmp"],
            ignore_directories=True,
            case_sensitive=False,
        )
        self.target_script = target_script

    def on_created(self, event):
        # 仅处理文件创建事件,避免重复触发
        file_name = event.src_path.split("\\")[-1]  # Windows路径分割
        # 检查文件名是否匹配规则
        if file_name in self.target_script:
            print(f"[{time.asctime()}] 检测到目标文件: [{event.src_path}]")
            # 使用sys.executable确保调用当前环境的Python解释器
            subprocess.Popen([sys.executable, self.target_script[file_name]])

class MultiWatcher:
    def __init__(self, rules):
        self.observer = Observer()
        self.rules = rules

    def run(self):
        for rule in self.rules:
            handler = RuleHandler(rule["script_map"])
            self.observer.schedule(handler, rule["path"], recursive=True)
        
        self.observer.start()
        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            self.observer.stop()
            print("监控已停止")
        self.observer.join()

if __name__ == "__main__":
    # 定义监控规则:每个规则包含监控路径、文件名到脚本的映射
    MONITOR_RULES = [
        {
            "path": "C:/User/AAxxx/video/",
            "script_map": {"ABxxx_11.avi": "ABxxx_11.py"}
        },
        {
            "path": "C:/User/BBxxx/video/",
            "script_map": {"CDxxx_22.avi": "CDxxx_22.py"}
        },
        {
            "path": "C:/User/CCxxx/video/",
            "script_map": {"EFxxx_33.avi": "EFxxx_33.py"}
        }
    ]

    watcher = MultiWatcher(MONITOR_RULES)
    watcher.run()

关键说明

  1. 规则映射表:MONITOR_RULES里每个条目对应一组监控逻辑,你可以随时添加或修改规则,无需改动核心代码
  2. 事件触发时机:使用on_created而非on_any_event,避免文件修改、删除等无关事件触发脚本
  3. 脚本执行:用sys.executable替代硬编码的python,确保使用当前运行环境的Python解释器,避免环境不一致问题
  4. 递归监控:schedule方法中设置recursive=True,会自动监控目标路径下的所有子目录

内容的提问来源于stack exchange,提问作者Kukkik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:25:16