2012-07-17 120 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找到该进程。