从http://docs.python.org/library/functions.html#open为什么要缓冲子进程的标准输出(重定向到无缓冲文件)?
可选BUFSIZE参数 指定文件的所需的缓冲区 大小:0表示无缓冲,1表示缓冲线 ,任何其他正值 装置使用(大约) 该大小的缓冲器。负bufsize意味着 使用系统默认值,即 通常行缓冲tty设备 并为其他文件完全缓冲。如果省略了 ,则使用系统默认值。
我将0作为bufsize传递给下方,但未使用flush()当我运行main_process时没有输出写入文件。
是什么原因?
# --------------------------------- sub_process.py
import sys
import time
if __name__ == '__main__':
print 'printed from redirect.py'
# why is the following flush() needed? 'std-output' is (?) unbuffered...
sys.stdout.flush()
time.sleep(6)
# --------------------------------- main_process.py
import subprocess
import time
if __name__ == '__main__':
p = subprocess.Popen(
['python', 'sub_process.py'],
stdout=open('std-output', 'w', 0))
time.sleep(3)
p.terminate()
+1,我花了大约30分钟试图找出为什么'sys.stdout' - >'subprocess.PIPE'几天前没有工作。 'flush()'是答案,但我们为什么需要它? – 2011-05-07 17:21:40