问题描述
当我的看门狗应用程序启动时,我需要为目录中存在的文件创建 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 (将#修改为@)