Python看门狗返回目录中的更改列表

问题描述

我正在使用看门狗来查看是否已创建/删除/移动/修改目录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) 

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)