后台进程 subprocess.Popen 与管道

Posted

技术标签:

【中文标题】后台进程 subprocess.Popen 与管道【英文标题】:Background Process subprocess.Popen with Pipe 【发布时间】:2012-04-07 21:04:42 【问题描述】:

我正在尝试使用 arecord 使用 python 记录和转换流。

在 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 命令

【问题讨论】:

【参考方案1】:

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

【讨论】:

非常感谢。浪费时间寻找出路,有时答案就是这么简单

以上是关于后台进程 subprocess.Popen 与管道的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 subprocess.Popen 通过管道连接多个进程?

常用模块——subprocess模块

subprogress模块

Python、子进程、管道和选择

可以python子进程Popen接受多个stdin流吗?

如何从 subprocess.Popen 使用 STDIN [重复]