2012-04-07 16 views
7

私は記録し、ストリームをpythonでarecordを使って変換しようとしています。シェルでバックグラウンドプロセスsubprocess.Popen with pipe

このコマンド多かれ少なかれ似ている:

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

私は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

サブプロセスの実行中にメインのPythonプロセスをブロックしたくない場合は、単にp2.communicate()を呼び出しないでください。 subprocess.Popen()への通話はブロックされません。

+1

ありがとうございました。時間を無駄にして、時には答えを見つけようとするのは、これだけ簡単です。 –