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

问题描述

我无法理解为什么代码中的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```

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)