2012-04-07 26 views
7

我想记录和转换与Python使用arecord流。后台进程subprocess.Popen与管道

在shell这是一个命令或多或少是:

arecord -B 5000 -f dat | lame -m j -q 5 -V 2 - test.mp3 & 

在Python我试图与subprocess.Popen:

reccmd = ["arecord", "-B", "5000", "-f", "dat"] 
mp3cmd = ["lame", "-m", "j", "-q", "5", "-V", "2", "-", "test.mp3"] 
p = subprocess.Popen(reccmd, stdout=subprocess.PIPE) 
p2 = subprocess.Popen(mp3cmd, stdin=p.stdout) 
p2.communicate() 

但我不知道如何包含“&”或代码类似的东西能够与一个

killall arecord命令停止记录

回答

9

如果您不希望主进程在执行子进程时被阻塞,请不要调用p2.communicate()。拨打subprocess.Popen()不会阻止。

+1

非常感谢。浪费时间试图找到出路,有时候答案就是这么简单 – 2012-04-07 22:40:50