Omijanie buforowania wyjścia podprocesu popen w C lub Pythonie

Mam ogólne pytanie o popen (i wszystkich powiązanych funkcjach), odnoszące się do wszystkich systemów operacyjnych, kiedy piszę skrypt Pythona lub jakiś kod c i uruchamiam wynikowy plik wykonywalny z konsoli (win lub linux), mogę natychmiast zobaczyć wyjście z procesu. Jednakże, jeśli uruchomię ten sam plik wykonywalny, co rozwidlony proces ze swoim stdout przekierowanym do potoku, bufory wyjściowe gdzieś, zwykle do 4096 bajtów, zanim zostaną zapisane w potoku, gdzie proces macierzysty może je odczytać.

Poniższy skrypt Pythona wygeneruje dane wyjściowe w porcjach po 1024 bajty

import os, sys, time

if __name__ == "__main__":
     dye = '@'*1024
     for i in range (0,8):
        print dye
        time.sleep(1)

Następujący skrypt Pythona wykona poprzedni skrypt i odczyta dane wyjściowe, gdy tylko dotrze do potoku, bajt po bajcie

import os, sys, subprocess, time, thread

if __name__ == "__main__":
    execArgs = ["c:\\python25\\python.exe", "C:\\Scripts\\PythonScratch\\byte_stream.py"]

    p = subprocess.Popen(execArgs, bufsize=0, stdout=subprocess.PIPE)
    while p.returncode == None:
        data = p.stdout.read(1)
        sys.stdout.write(data)
        p.poll()

Dostosuj ścieżkę do swojego systemu operacyjnego. Po uruchomieniu w tej konfiguracji, wyjście nie pojawi się w porcjach po 1024, ale porcje po 4096, mimo że rozmiar bufora polecenia popen jest ustawiony na 0 (co i tak jest domyślne). Czy ktoś może mi powiedzieć, jak zmienić to zachowanie? Czy jest jakiś sposób, w jaki mogę zmusić system operacyjny do traktowania danych wyjściowych z rozwidlonego procesu w taki sam sposób, jak przy uruchamianiu z konsoli? bez buforowania?

questionAnswers(2)

yourAnswerToTheQuestion