2016-08-19 5 views
0

У меня есть плейлист, который меняется во время игры, Mplayer не перезагружает плейлист в конце первого трека, поэтому мне нужно сделать снимок EOF, а затем перезагрузить mplayer продолжать играть. Как определить EOF с помощью mplayer и popen? Или есть более простой способ, который мне не хватает? Я проверил предложенный «дублирующий» вопрос, и я не верю, что он дает мне ответ, поскольку это захватывает конец трека/плейлиста через popen.mplayer - Как я могу обнаружить EOF в Python

def play_music(): 
    global myplaylist 
    global playflag 
    if not playflag: 
    mycommand = ["mplayer -really-quiet -slave -volume 1 -playlist /home/pi/scripts/playlist.txt"] 
    p = subprocess.Popen(mycommand, stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True) 
    playflag = True 
    else: 
    pass 
+0

Чтобы уточнить: при запуске этой процедуры вы хотите запустить mplayer с вашим плейлистом. Затем происходит что-то, что изменяет (или добавляет к?) Файл 'playlist.txt'. Когда mplayer достигает конца трека, вы хотите повторно запустить playlist.txt, и если он изменился, вы хотите остановить mplayer и перезапустить его с помощью нового списка воспроизведения. Это верно? –

+0

Да, точно, у меня есть еще одна процедура, которая добавляет новые треки в 'playlist.txt. Я планировал использовать «playflag» в качестве способа проверить, играет ли mplayer, чтобы я мог вызвать его, но я не могу найти способ. Итак, в настоящее время 'play_music()' вызывается, когда новый трек добавляется в список воспроизведения, а если он не работает, запустите подпроцесс. НТН? – northwarks

ответ

0

Ну, я не мог исправить эту проблему, должен быть способ получить статус mplayer, а затем сделать некоторый код вокруг состояния. Как бы то ни было, я не мог заставить mplayer перезагрузить плейлист, как только у него появился новый трек, и когда я это сделал, это началось с самого начала. Нечасто я позволял чему-то избивать меня!

Для будущих читателей я пошел по маршруту MPD/MPC, не туда, куда я хотел пойти, но у него хорошее управление списком воспроизведения, и с использованием свойства client.consume оно фактически удаляет дорожки из плейлиста по ходу движения, что отлично подходит для Сценарий Jukebox.

+0

Хороший выбор MDP. Я бы просто проигнорировал встроенный плейлист mplayer и «построил свой собственный»: очередь/список треков, на которых mplayer перезапускается на следующем треке. примерно вокруг строк 'while len (tracks): track = tracks.pop(); shell (mplayer track); endwhile' – smassey

+0

Спасибо за это, будет помнить об этом, если у меня возникнут другие проблемы. – northwarks