我有一个程序可以打开一个子流程并通过写入stdin
并从其stdout
读取来与之通信。
proc = subprocess.Popen(['foo'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE)
proc.stdin.write('stuff\n')
proc.stdin.flush()
问题是,在阅读时,如果我调用proc.stdout.read()
,当我尝试使用以下内容逐行阅读时,它总是会阻塞:
output = str()
while proc.stdout in select.select([proc.stdout], [], [])[0]:
output += proc.stdout.readline()
它仍会阻塞,因为即使在已经读取了所有输出后,select.select
也会返回proc.stdout
。我该怎么办?
请注意,我没有使用proc.communicate
,因为我希望多次与流程进行通信