2012-04-07 15 views
7

Tôi đang cố gắng ghi và chuyển đổi luồng bằng python bằng cách sử dụng arecord.Quy trình xử lý nền phụ.Chọn với đường ống

Trong vỏ này là một lệnh nhiều hơn hoặc ít hơn như:

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

Trong Python Tôi cố gắng này với 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() 

Nhưng tôi không biết làm thế nào để bao gồm các "&" hoặc nội dung nào đó tương tự trong mã để có thể dừng quay bằng số

killall arecord lệnh

Trả lời

9

Nếu bạn không muốn quá trình Python chính chặn trong khi thực hiện các quy trình con, chỉ cần không gọi p2.communicate(). Các cuộc gọi đến subprocess.Popen() không chặn.

+1

Cảm ơn bạn rất nhiều. Đã lãng phí thời gian để tìm cách thoát ra và đôi khi câu trả lời chỉ đơn giản là dễ dàng –