我有两个小的python文件,第一个使用 input
读取一行,然后打印另一行
a = input()
print('complete')
第二次尝试将其作为子进程运行
import subprocess
proc = subprocess.Popen('./simp.py',
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
bufsize=1)
print('writing')
proc.stdin.write(b'hey\n')
print('reading')
proc.stdout.readline()
上面的脚本将打印"writing"然后"reading"但随后挂起 . 起初我以为这是一个stdout缓冲问题,所以我将 bufsize=1
更改为 bufsize=0
,这确实解决了问题 . 但是,它似乎导致了这个问题 .
使用 bufsize=1
,如果我在写入下面添加 proc.stdin.flush()
,则该过程继续 . 这两种方法看起来都很笨拙,因为(1)无缓冲的流很慢(2)在任何地方添加刷新都容易出错 . 为什么以上 write
不会在换行符上刷新?文档说在为子进程创建stdin,stdout和stderr流时会使用 bufsize
,那么是什么导致写入不在换行符上刷新?
1 回答
来自the docs:"1 means line buffered (only usable if universal_newlines=True i.e., in a text mode)" . 这有效: