2012-04-07 6 views
7

Sto provando a registrare e convertire uno stream con python utilizzando arecord.Sottoprocesso processo background.Popen with Pipe

Nella shell questo è un comando più o meno come:

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

In Python ho provato questo 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() 

Ma io non so come includere la "&" o qualcosa di simile nel codice per essere in grado di fermare la registrazione con un comando

killall arecord

risposta

9

Se non si desidera bloccare il processo Python principale durante l'esecuzione dei sottoprocessi, è sufficiente non chiamare p2.communicate(). Le chiamate a subprocess.Popen() non bloccano.

+1

Grazie mille. Ore sprecate che cercano di trovare una via d'uscita ea volte la risposta è proprio così facile –