【发布时间】:2011-08-20 19:43:53
【问题描述】:
来自http://docs.python.org/library/functions.html#open
可选的 bufsize 参数 指定文件所需的缓冲区 size: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()是答案,但我们为什么需要它???
标签: python subprocess stdout popen buffering