我正在输出
parec -d "name"
您不需要知道此命令,只需知道按Enter键后,它会输出代表音频的二进制数据。
我的目标是用python实时读取它,即启动它并将其放在变量“数据”中,我可以用类似
的内容读取data = p.stdout.read()
我尝试了什么
p = subprocess.Popen(['parec','-d','"name"'],stdout=subprocess.PIPE,shell=True)
while True:
data = p.stdout.read()
但这导致没有收到任何数据。
parec -d "name" > result.raw
可通过音频程序读取,并且包含完全必要的数据。那么python的命令是什么?
答案 0 :(得分:0)
当你在subprocess.PIPE上调用read()时,我相信它会阻塞,直到parec
退出
我很确定这个解决方案不应该阻止:)
找到解决方案
from subprocess import Popen, PIPE, STDOUT
p = Popen('c:/python26/python printingTest.py', stdout = PIPE,
stderr = PIPE)
for line in iter(p.stdout.readline, ''):
print line
p.stdout.close()
这需要很多搜索,但可以在@ Getting realtime output using subprocess
找到此解决方案答案 1 :(得分:0)
你不应该使用p.stdout.read()
(等待所有数据)或p.stdout.readline()
(这会读取一行“数据”,如果是二进制则没有意义) 。相反,您可以使用p.stdout.read(4096)
,例如,它将等到4096个字节并返回它们。
使用文件对象上的方法无法读取“到目前为止可用的所有内容”,但如果您转到较低级别的文件句柄,则有一种方法:
data = os.read(p.stdout.fileno(), 4096)
这将等到至少有一个字节要读取,但随后返回所有可用字节,最大长度为4096.
我的例子中的数字4096有点武断。如果数据快速进入,您也可以使用更大的值。