Запустить модуль Python, если новый файл в каталоге создан (сторожевой таймер) - PullRequest
0 голосов
/ 26 февраля 2019

Итак, я пытаюсь создать приложение на Python, которое становится активным, когда файлы создаются в каталоге, а затем запускает слайд-шоу с новыми файлами.Я понял и сумел правильно создать и запустить Watchdog-Observer, но теперь не знаю, как продолжить.

В одном модуле (mediachecker.py) записывается наблюдатель, в модуле main.pymediachecker.py исполняется.Теперь я хочу продолжить и запускать свой модуль slideshow.py только при создании файлов (например, когда наблюдатель обнаружил событие on_created).

Я думаю, что я не совсем понял концепцию наблюдателей или наблюдателяне знаю, как обрабатывать полученные события.

Надеюсь, вы, ребята, сможете мне помочь!

mediachecker.py

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()

main.py

from mediachecker import Checker

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


if __name__ == "__main__":
    main()

slideshow.py в настоящее время пуст и скоро будет записан

1 Ответ

0 голосов
/ 27 февраля 2019

Итак, я нашел решение.Я должен передать обратный вызов через конструкторы.

mediachecker.py

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()

main.py

from mediachecker import Checker



def callback():
    print('callback')

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




if __name__ == "__main__":
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...