Из http://docs.python.org/library/functions.html#open
Необязательный аргумент bufsize указывает желаемый размер буфера файла: 0 означает отсутствие буферизации, 1 означает буферизацию строки, любое другое положительное значение означает использование буфера (приблизительно) этого размера. Отрицательный размер буфера означает использование системного значения по умолчанию, которое обычно представляет собой строковую буферизацию для 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()
sys.stdout
->subprocess.PIPE
не работал пару дней назад.flush()
это ответ, но зачем он нам??? - person This   schedule 07.05.2011