Eu gostaria de usar o watchdog com o pygame, isso é possível? O objetivo do meu script é que, quando algo acontecer na pasta, um vídeo seja exibido. O problema é que quando executo o script ele não retorna nenhum erro.
Aqui está o código que estou usando.
#!/usr/bin/python
import time
import os
import pygame
from moviepy.editor import *
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
link = 'abs\\'
def detectFile():
pygame.display.set_caption('Hello World!')
clip = VideoFileClip('01.mp4')
clip.preview(fps=30,fullscreen=True)
pygame.quit()
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
print 'test'
detectFile()
if __name__ == "__main__":
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path=link, recursive=False)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
@alciomarhollanda por favor, você pode informar qual sistema operacional você está usando? Seu script e 'abs \' localizados no mesmo diretório?
Olá @rrzaripov , eu uso windows 10. A pasta abs \ está no mesmo diretório.
Obrigado
@alciomarhollanda este não é um problema de vigilância. e você pode fechar este problema. Testei seu código e verifiquei que o watchdog detecta a criação de um novo arquivo no diretório abs \ e imprime 'test'. Mas o problema é onde você trabalha com pygame. Você cria o manipulador e o passa para a instância do Observer. Na verdade, a instância do Observer funciona como um thread separado. E como eu sei, o pygame funciona apenas no thread principal. Portanto, quando a instância do Observer chama o manipulador (e a função detectFile), o pygame não funciona, porque isso não é feito no thread principal. Aqui está um exemplo de trabalho:
#!/usr/bin/python
import time
import os
import pygame
from moviepy.editor import *
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from threading import Event
modified = Event()
link = 'abs\\'
def detectFile():
while True:
modified.wait()
pygame.display.set_caption('Hello World!')
clip = VideoFileClip('01.mp4')
clip.preview(fps=30,fullscreen=True)
pygame.quit()
break
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
print 'test'
if __name__ == "__main__":
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path=link, recursive=False)
observer.start()
detectFile()
observer.stop()
observer.join()
@BoboTiG este problema pode ser
@BoboTiG este problema pode ser fechado.
thanks you @BoboTiG
Comentários muito úteis
@alciomarhollanda este não é um problema de vigilância. e você pode fechar este problema. Testei seu código e verifiquei que o watchdog detecta a criação de um novo arquivo no diretório abs \ e imprime 'test'. Mas o problema é onde você trabalha com pygame. Você cria o manipulador e o passa para a instância do Observer. Na verdade, a instância do Observer funciona como um thread separado. E como eu sei, o pygame funciona apenas no thread principal. Portanto, quando a instância do Observer chama o manipulador (e a função detectFile), o pygame não funciona, porque isso não é feito no thread principal. Aqui está um exemplo de trabalho: