2012-04-07 10 views
7

Estoy tratando de grabar y convertir una secuencia con python usando arecord.Proceso de fondo subproceso.Popen with Pipe

En el shell Esta es una orden más o menos así:

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

En Python yo probamos este con 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() 

Pero no sé cómo incluir la "&" o algo similar en el código para poder detener la grabación con un comando

killall arecord

Respuesta

9

Si no desea que el proceso principal de Python se bloquee mientras se ejecutan los subprocesos, simplemente no llame al p2.communicate(). Las llamadas al subprocess.Popen() no bloquean.

+1

Muchas gracias. Perdí horas tratando de encontrar una salida y, a veces, la respuesta es así de fácil –

Cuestiones relacionadas