了解Python3标准输出缓冲到管道

时间:2020-08-20 19:10:53

标签: python python-3.x stdout

我无法理解为什么代码中的print语句会立即产生输出。

import subprocess
proc = subprocess.Popen(['python3', '-i'], stdin=subprocess.PIPE,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
_ = proc.stdin.write(b'2+2\n')
_ = proc.stdin.flush()
print(proc.stdout.readline())
# produces b'4\n' immidiately!
proc.terminate()
proc.wait(timeout=0.2)

在将子'python -i'的stdout写入管道时,它是否应该被完全缓冲? 意思是,直到子项终止或子项的stdout缓冲区已满并显式刷新到os之前,我才应该在print语句中看到输出?

有趣的是,在“ enter”之后看到的终端输出上的相同行为。也许'python -i'在'\ n'之后刷新输出?

➜  ~ python3 -i -c 'print("hiiiii")' | cat 
>>> 
>>> hiiiii

>>> ^D```

0 个答案:

没有答案