Я хотел бы использовать сторожевой таймер с pygame, возможно ли это? Цель моего сценария - когда что-то происходит в папке, будет отображаться видео. Проблема в том, что когда я запускаю скрипт, он не возвращает никаких ошибок.
Вот код, который я использую.
#!/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, пожалуйста, укажите, какую ОС вы используете? Ваш скрипт и абс \ находятся в одном каталоге?
Здравствуйте @rrzaripov , я использую windows 10. Папка abs \ находится в том же каталоге.
Спасибо
@alciomarhollanda, это не проблема сторожевого пса. и вы можете закрыть эту проблему. Я проверил ваш код и убедился, что сторожевой таймер обнаруживает создание нового файла в каталоге abs \ и печатает test. Но проблема в том, где вы работаете с pygame. Вы создаете обработчик и передаете его экземпляру Observer. Фактически экземпляр Observer работает как отдельный поток. И насколько я знаю, pygame работает только в основном потоке. Поэтому, когда экземпляр Observer вызывает обработчик (и функцию detectFile), pygame не работает, потому что это делается не в основном потоке. Вот рабочий пример:
#!/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 этот вопрос можно закрыть.
@BoboTiG этот вопрос можно закрыть.
спасибо @BoboTiG
Самый полезный комментарий
@alciomarhollanda, это не проблема сторожевого пса. и вы можете закрыть эту проблему. Я проверил ваш код и убедился, что сторожевой таймер обнаруживает создание нового файла в каталоге abs \ и печатает test. Но проблема в том, где вы работаете с pygame. Вы создаете обработчик и передаете его экземпляру Observer. Фактически экземпляр Observer работает как отдельный поток. И насколько я знаю, pygame работает только в основном потоке. Поэтому, когда экземпляр Observer вызывает обработчик (и функцию detectFile), pygame не работает, потому что это делается не в основном потоке. Вот рабочий пример: