所以我试图捕捉HandBrakeCLI的输出作为一个Python子进程。 这不是标准错误问题,因为每次更新会在类文件管新行。 然而,标准输出,HandBrakeCLI使得就地更新,我有困难,捕捉它们。 我还没有URE就地更新叫什么,这使得寻找相关的提示有点棘手。
我想出了迄今唯一的解决办法是将标准输出写入到实际的文件,并从阅读,但我宁愿做理智的方式(在内存中)。
COMMAND = ['HandBrakeCLI', '-v', '-i', 'in.m4v', '-o', 'out.m4v', '-Z', 'Normal']
outfile = open('output.txt', 'w')
proc = subprocess.Popen(COMMAND, stdout=outfile, stderr=subprocess.PIPE)
infile = open('output.txt', 'r')
while proc.poll() is None:
print infile.read()
infile.seek(0)
这工作,但必须有一个更好的办法。 当尝试使用通信()或只是简单的proc.stdout.read()我什么也没得到。
我究竟做错了什么? 谢谢!
更新
每@wim建议我检查,看看原始输出HandBrakeCLI提供什么,它看起来是这样的:
\rEncoding: task 1 of 1, 0.15 %
什么是处理前缀与\ r一个标准输出的最佳方式?