bufsize если задан, имеет тоже значение, что и передаваемый параметр в встроенную функцию open(): 0 – без буферизации, 1 – линейная буферизация, любое другое положительное значение – использование буфера заданным размером (значение будет аппроксимировано), любое другое отрицательное значение - использование системных настроек по умолчанию, что обычно означает полную буферизацию.Но игра с параметрами не дала ожидаемого эффекта, точнее поведение вообще не менялось. Для тестирования были написаны программы one.py и two.py, последняя раз в секунду делает print строки длиною 1024 символа. Запустив one.py увидел как на экран “пачками” появляется вывод two.py причем для python 2.7 эти пачки были по 4 итерации т.е. по 4кб, для python 3.1.3 по 8кб. На Windows проблема таже.
Постарался максимально полно изложить проблему. Есть ли здесь пути решения? Это баг питона или “фича”? Может я чего то не понимаю? Буду рад конструктивным мыслям.
one.py
# -*- coding: utf-8 -*-
import subprocess, sys
# python для вызова версии 2.7, python3 для вызова 3.1.3
p=subprocess.Popen(['python','./two.py'], stdout=subprocess.PIPE, bufsize=0)
sys.stdout.write('start\n')
s=True
while s:
s=p.stdout.readline()
sys.stdout.write(str(s.rstrip())+'\n')
sys.stdout.write('end\n')
# -*- coding: utf-8 -*-
from time import sleep
import sys
i=0
while True:
# строка длиной 1024
s='iteration #%000i'%i
s=s+'*'*(1023-len(s))+'\n'
sys.stdout.write(s)
i+=1
sleep(1)