当我创建一个子进程并通过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()注释掉该行,那么我需要等到文件关闭
答案 0 :(得分:2)
是的,input()
函数刷新缓冲区。考虑一下,它必须-该功能的目的是向用户显示提示,然后要求其输入,并且为了确保用户看到提示,需要刷新打印缓冲区。