Закройте и снова откройте экземпляр видеоплеера, если какой-либо другой файл был изменен

Я борюсь с этим в течение недели или двух. Эта программа читает имя исполнителя и название песни из текстового файла, использует pafy для поиска URL-адреса youtube, а затем воспроизводит его в формате mpv. я использую сторожевой таймер, чтобы зарегистрироваться, если текстовый файл был изменен и обновлен с новым исполнителем и песней. проблема в том, что как только видео начинает воспроизводиться, кажется, что программа застревает в этом месте, а сторожевой таймер ничего не делает. программа регистрирует только первую модификацию, прежде чем будет открыт первый экземпляр плеера. после этого он просто ничего не регистрирует.

Что я должен попробовать?

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import sys, os.path, time, logging
from watchdog.events import 
PatternMatchingEventHandler
import cv2
import os
import pafy
import urllib.request
import urllib.parse
import re
import mpv

#read txt
txt = open('//log/txt.txt').readline()
print (txt)
#search youtube based on .txt
query_string = urllib.parse.urlencode({"search_query" : 
txt})
html_content = 
urllib.request.urlopen("http://www.youtube.com/results?" 
+ query_string)
search_results = re.findall(r'href=\"\/watch\?v=(.{11})', 
html_content.read().decode())
link = ('http://www.youtube.com/watch?v=' + 
search_results[0])
videoPafy = pafy.new(link)
best = videoPafy.getbestvideo()
videompv = best.url

#play url in mpv player
def player_window():
    player = mpv.MPV(ytdl=True, 
input_default_bindings=True, input_vo_keyboard=True)
    player.fullscreen = True
    player.loop_playlist = 'inf'
    player.play(videompv)
    player.wait_for_playback()
    del player

class ChangeHandler(PatternMatchingEventHandler):
    patterns = ["*.txt"]

    def process(self, event):
        """
        event.event_type
            'modified' | 'created' | 'moved' | 'deleted'
        event.is_directory
            True | False
        event.src_path
            path/to/observed/file
        """
        print ("Received modified event - %s." % 
event.src_path)
        player_window()


    def on_modified(self, event):
        self.process(event)

    def on_created(self, event):
        self.process(event)


if __name__ == '__main__':
    observer = Observer()
    observer.schedule(ChangeHandler(), path='//log/', 
recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)

    except KeyboardInterrupt:
        observer.stop()
    observer.join()

0 ответов

Другие вопросы по тегам