如果创建了目录中的新文件,则启动python模块(看门狗)

问题描述 投票:0回答:1

所以我试图创建一个python应用程序,当在目录中创建文件然后用新文件启动幻灯片时,它正在变为活动状态。我理解并设法正确创建并执行Watchdog-Observer,但现在我不知道如何继续。

在一个模块(mediachecker.py)中编写观察者,在main.py模块中,mediachecker.py正在执行。我现在想要继续并且只在创建文件时启动我的slideshow.py模块(所以当观察者检测到on_created事件时)。

我想我不太了解观察者或看门狗的概念,也不知道如何处理结果事件。

我希望你们能帮助我!

么嗲checker.朋友

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

path = '/Users/muser/Documents/directory'

class NewEventHandler(FileSystemEventHandler):
    def on_created(self, event):
        print('New files created')


class Checker(NewEventHandler):

    def watch(self):
        event_handler = NewEventHandler()
        observer = Observer()
        observer.schedule(event_handler, path, recursive=True)
        observer.start()
        try:
            while True:
                time.sleep(1) 
        except KeyboardInterrupt:
            observer.stop()
            observer.join()

卖弄.朋友

from mediachecker import Checker

def main():
    checker = Checker()
    checker.watch()


if __name__ == "__main__":
    main()

slideshow.py目前是空的,很快就会被写入

python observers watchdog python-watchdog
1个回答
0
投票

所以我找到了解决方案。我必须通过构造函数传递回调。

么嗲checker.朋友

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

path = '/Users/user/Documents/directory'

class NewEventHandler(FileSystemEventHandler):
    def __init__(self, callback):
        self.callback = callback
        super().__init__()

    def on_created(self, event):
        print('New files created')
        self.callback()

class Checker():
    def watch(self, callback):
        event_handler = NewEventHandler(callback)
        observer = Observer()
        observer.schedule(event_handler, path, recursive=True)
        observer.start()
        try:
            while True:
                time.sleep(1) 
        except KeyboardInterrupt:
            observer.stop()
            observer.join()

卖弄.朋友

from mediachecker import Checker



def callback():
    print('callback')

def main():
    checker = Checker()
    checker.watch(callback)




if __name__ == "__main__":
    main()
© www.soinside.com 2019 - 2024. All rights reserved.