2016-08-19 51 views
0

我有一个播放列表在播放过程中发生变化,Mplayer不会在第一个轨道末尾重新加载播放列表,所以我需要做的是捕获EOF,然后重新加载mplayer到继续玩。如何使用mplayer和popen检测EOF?还是有更简单的方法,我错过了?我检查了建议的'重复'问题,我不相信它给了我答案,因为这是通过popen捕捉曲目/播放列表的结尾。mplayer - 我如何检测Python中的EOF

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()'被调用时,一个新的轨道被添加到播放列表,如果它没有运行运行子进程。 HTH? – northwarks

回答

0

嗯,我不能解决这个问题,必须有一种方法来获得mplayer状态,然后在状态周围做一些代码。就目前情况而言,我无法让mplayer重新加载播放列表,一旦它添加了新的曲目,并且当我开始时它开始回来 - 不是我经常让某些东西击败我!

对于未来的读者,我去了MPD/MPC路线,不是我想去的地方,但它有良好的播放列表管理,并使用client.consume属性,它实际上会从播放列表中删除曲目,自动存储塔场景。

+0

MDP的不错选择。我会简单地忽略mplayer的内建播放列表并“建立自己的”:一个队列/ mplayer在下一个轨道上重新启动的轨道列表。大致围绕'while(len)(tracks):track = tracks.pop();外壳(mplayer轨道); endwhile' – smassey

+0

谢谢你,如果我有任何其他问题,请记住这一点。 – northwarks