Watchdog: O cão de guarda com pygame

Criado em 23 nov. 2018  ·  5Comentários  ·  Fonte: gorakhargosh/watchdog

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()
not a bug

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:

#!/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()

Todos 5 comentários

@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

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

xsank picture xsank  ·  5Comentários

Nikolaissue picture Nikolaissue  ·  6Comentários

fx86 picture fx86  ·  3Comentários

AdrienPensart picture AdrienPensart  ·  3Comentários

datakurre picture datakurre  ·  7Comentários