Python监视程序返回目录中的更改列表

Python监视程序返回目录中的更改列表,python,python-watchdog,Python,Python Watchdog,我正在使用watchdog查看目录C:\Temp中的任何文本文件是否已创建/删除/移动/修改。我希望看门狗只运行10秒钟,然后给我“文件夹中发生了什么”的列表,这可能会进一步处理。 代码运行得很好。但是有没有更好的解决方案,或者有没有改进代码的方法? 我目前的情况如下: import time from watchdog.observers import Observer from watchdog.events import PatternMatchingEventHandler clas

我正在使用watchdog查看目录C:\Temp中的任何文本文件是否已创建/删除/移动/修改。我希望看门狗只运行10秒钟,然后给我“文件夹中发生了什么”的列表,这可能会进一步处理。 代码运行得很好。但是有没有更好的解决方案,或者有没有改进代码的方法? 我目前的情况如下:

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


class Watcher:
    """ Watchdog """
    def __init__(self, dir_to_watch, stop_after_seconds=60, patterns=None):
        self.dir_to_watch = dir_to_watch
        self.observer = Observer()
        self.stop_after_seconds = stop_after_seconds
        self.patterns = patterns
        self.t_start = time.time()
        self.output = []

    def run(self):
        """ Runs watchdog """
        event_handler = Handler(self.patterns, self.output)
        self.observer.schedule(event_handler, self.dir_to_watch, recursive=True)
        self.observer.start()
        try:
            while True:
                time.sleep(1)
                if time.time() - self.t_start > self.stop_after_seconds:
                    self.observer.stop()
                    print("Watchdog stopped")
                    break
        except KeyboardInterrupt:
            self.observer.stop()
            print("Watchdog stopped")
        self.observer.join()
        return self.output


class Handler(PatternMatchingEventHandler):
    """ Handler """
    def __init__(self, patterns, output):
        # Set the patterns for PatternMatchingEventHandler
        PatternMatchingEventHandler.__init__(self, patterns=patterns, ignore_directories=True, case_sensitive=False)
        self.output = output

    def on_created(self, event):
        self.output.append("created: %s." % event.src_path)

    def on_modified(self, event):
        self.output.append("modified: %s." % event.src_path)

    def on_moved(self, event):
        self.output.append("moved: %s." % event.src_path)

    def on_deleted(self, event):
        self.output.append("deleted: %s." % event.src_path)


if __name__ == "__main__":
    w = Watcher(r"C:\Temp", 10, ['*.txt'])
    for event in w.run():
        print(event)