2012-07-17 121 views
0

我創建了一個小型音頻播放器,在我指定的網站上查看有聲讀物的章節,下載它並播放它。唯一的問題是,我無法暫停。播放我正在使用的mp3文件os.system("afplay chapter.mp3")在Python中暫停進程或線程

我想過創建一個線程,其中調用了os.system,但我很確定我不能以這種方式暫停。如果線程是一個循環,我可以鎖定一個當我準備恢復時需要訪問和解鎖的變量。但是由於這個線程只是一行看起來不可能的代碼。我還着眼於創建一個流程並將SIGSTOP發送給它。但由於某些未知的原因,這是行不通的。

import os, signal 
from multiprocessing import Process 

p = Process(target=play) 
p.start() 
raw_input("press enter to pause: ") 
os.kill(p.pid, signal.SIGSTOP) 

該代碼只是在不停止進程的情況下靜默執行。

我知道還有其他的afplay,但現在我只是堅持os.system調用。所以我的問題是,如何暫停單線程或進程?我需要找到afplay的進程ID,而不是使用Process()調用創建新進程?如果是這樣如何?

+1

你怎麼使用'multiprocessing'? - 這是針對不同的場景。我認爲'play'是一個調用'os.system(「afplay chapter.mp3」)''的python函數。爲什麼不使用'subprocess'模塊而不是'subprocess'和'os.system'?這應該讓你更好地控制產生的進程。 – scytale 2012-07-17 13:21:21

+0

我以前沒有使用過程,也不知道subprocess存在。謝謝你告訴我!我在命令行中試過了,它只是做了我需要的!我希望我能接受評論! ;) – Harrison 2012-07-17 13:36:50

回答

0

爲什麼不使用子進程模塊而不是子進程和os.system?這應該讓你更好地控制產生的進程。

1

os.system創建子進程並等待該子進程退出。您可以使用os.execv替換另一個程序的進程,或使用subprocess.Popen創建子進程,您可以使用Popen.pid找到該進程。