2016-08-19 54 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