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