Why is standard output from subprocess (redirected to unbuffered file) being buffered?

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()

9
задан ralphtheninja 8 May 2011 в 11:01
поделиться