看门狗 - 在启动时为现有文件创建事件

问题描述

当我的看门狗应用程序启动时,我需要为目录中存在的文件创建 FileCreatedEvents。我已经在网上查看了一些东西来尝试完成它们,但它们都不适用于我目前的方法

Python Watchdog process existing files on startup https://www.reddit.com/r/learnpython/comments/fz57og/watchdog_how_to_include_existing_files/fn34dgk/

第一种方法似乎可行,但我没有使用队列。我有成对的文件,在收到文件对之前我无法对这些文件采取行动。所以我在文件进来时将文件添加到列表中,然后检查这对文件,如果它存在,我会做一些事情。

这是我的方法版本:

class Watcher():

    observer = None
    directory = None
    pattern = None

def __init__(self,directory,pattern):
    
    self.observer = Observer()
    self.directory = directory
    self.pattern = pattern

def run(self):
    event_handler = Handler(self.pattern)
    self.observer.daemon=True
    self.observer.schedule(event_handler,path=self.directory,recursive=False)      
    
    self.observer.start() 
    log.info("Watcher started...")

    log.info("Checking for existing files...")
    for file in os.listdir(self.directory):
        filename = os.path.join(self.directory,file)
        if os.path.isfile(filename) and "hash" not in filename:
            event = FileCreatedEvent(filename)
            event.event_type = "created"
            print(event) 
#prints: <FileCreatedEvent: event_type=created,src_path='my_file.txt',is_directory=False>
            self.observer.event_queue.put((event,self.observer))
            

    try:
        while True:
            time.sleep(2)
    except KeyboardInterrupt:
        self.observer.stop()
        log.info("Watcher stopped")
    observer.join()

我已经尝试在我的代码中实现这一点,直到这一行,一切都在进行:

self.observer.event_queue.put((event,self.observer))

我也试过这个:

event_handler.dispatch(event)

更新:

它似乎创建了事件,但是我不知道如何实际触发或触发事件。在此先感谢您的帮助

对于任何寻找这个的人,我有一个不相关的代码块,它阻止了我尝试的方法之一工作。这就是最终的解决方案:

event_handler.on_created(event)

解决方法

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

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

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