subprocess.Popen bufsize = 1被忽略

时间:2018-02-23 21:40:20

标签: python subprocess popen

我遇到了类似的问题: subprocess stdin buffer not flushing on newline with bufsize=1

当我指定bufsize = 1时,我的脚本没有逐行输出。当缓冲区填满时,它会输出。我想实时逐行阅读。

我在Linux Mint和CentOS 7上尝试过以下操作。我运行的是test.py,它调用可执行的'script'文件。

test.py

#!/usr/bin/python
import subprocess
import sys

process = subprocess.Popen('/root/script',bufsize=1, stdout=subprocess.PIPE, stderr=subprocess.PIPE,close_fds=True, universal_newlines=True)

for line in iter(process.stdout.readline, b''):
   print line

脚本

#!/usr/bin/python
import time
for i in range(0,999999):
    print str('This is a short line, ' + str(i) + '\n')
    time.sleep(0.01)

一次输出大量行,输出之间暂停。第一个大块在第154行结束

但是,如果我在脚本文件中使输出行更大:

print str('This is a long line................................................................................................. ' + str(i) + '\n')

第一个大块在第66行结束

为什么忽略我的缓冲区大小?

0 个答案:

没有答案