为什么输入flush stdout

时间:2019-07-12 13:38:55

标签: python-3.x input flush

当我创建一个子进程并通过stdin end stdout进行通信时,除非我刷新缓冲区或执行input(),否则消息不会到达。

所以我想知道input()是否刷新缓冲区,如果是,我想知道为什么。

# file1
import subprocess
import time
import select

process = subprocess.Popen(['python3',  'file2.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)

read_ready, _, _ = select.select([process.stdout], [], [])
message = read_ready[0].readline().decode()
print(message)

time.sleep(11)

process.kill()

-

# file2
import sys
import time

print('1')

message = input()

# I added the sleep because the buffer gets flushed if the program stops
time.sleep(10)

如果我执行此代码,它将立即打印1。如果我用input()注释掉该行,那么我需要等到文件关闭

1 个答案:

答案 0 :(得分:2)

是的,input()函数刷新缓冲区。考虑一下,它必须-该功能的目的是向用户显示提示,然后要求其输入,并且为了确保用户看到提示,需要刷新打印缓冲区。