J'ai cette configuration de chien de garde dans le fichier main.py qui devrait exécuter le Watcher comme un démon (en arrière-plan), faire certaines choses pendant qu'il tourne (auxquelles le Watcher devrait réagir, par exemple créer un fichier de test) puis terminer le Watcher.
from watchdog.events import PatternMatchingEventHandler
from watchdog.observers import Observer
import time
import threading
class Watcher:
def watch_dir(self):
patterns = "*"
event_handler = PatternMatchingEventHandler(patterns)
event_handler.on_any_event = self.on_any_event
observer = Observer()
observer.schedule(event_handler, 'someDirToObserve')
observer.start()
try:
while True:
time.sleep(2)
except Exception as e:
observer.stop()
time.sleep(30)
observer.join()
def on_any_event(self, event):
print(event)
def start_watcher(watcher):
watcher.watch_dir()
def main():
print("Start")
watcher = Watcher()
thread = threading.Thread(target=start_watcher(watcher), daemon=True)
thread.start()
test_file = 'SomeTestFile'
test_file.unlink()
with test_file.open('w') as f:
f.write('Test')
print("Oh shit")
thread.join()
if __name__ == '__main__':
main()
Comment puis-je faire fonctionner le Watcher en arrière-plan tout en effectuant mes opérations et comment puis-je le terminer correctement ?