從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