From http://docs.python.org/library/functions.html#open
The optional bufsize argument указывает желаемый буфер файла 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()