我有两个小的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",但是会卡住。一开始我以为这是标准输出缓冲问题,因此我将
bufsize=1
改成了 bufsize=0
,这确实解决了问题。然而,似乎是标准输入引起的问题。当
bufsize=1
时,如果在写入后添加 proc.stdin.flush()
,进程就会继续执行。这两种方法都很笨拙,因为 (1) 无缓冲流很慢 (2) 到处添加刷新容易出错。为什么上面的 write
没有在换行时刷新呢?文档中说,bufsize
用于创建子进程的标准输入、标准输出和标准错误流,那么是什么导致了写操作没有在换行时刷新呢?
bufsize=1
可以正常工作。 - tdelaney