(视窗)
我编写了一些调用程序 SoX(子进程模块)的 Python 代码,如果您指定它,它会在 STDERR 上输出进度。我想从输出中获取百分比状态。如果我不是从 Python 脚本中调用它,它会立即启动并平稳进展到 100%。
如果我从 Python 脚本调用它,它会持续几秒钟直到它开始,然后它会在慢速输出和快速输出之间交替。尽管我有时会逐个字符地读取字符,但会冲出一大块。所以我不明白为什么在其他时候我可以看到角色一个接一个地变多。(顺便说一下,它在我的测试中生成了 15KiB 的数据。)
我已经用 mkvmerge 和 mkvextract 进行了同样的测试。他们也输出百分比。在那里阅读 STDOUT 很顺利。
这太不靠谱了!如何使 sox 的 stderr 流的读取更流畅,并可能防止一开始的延迟?
我如何打电话和阅读:
process = subprocess.Popen('sox_call_dummy.bat', stderr = subprocess.PIPE, stdout = subprocess.PIPE)
while True:
char = process.stderr.read(1).encode('string-escape')
sys.stdout.write(char)