przekierowanie stdout z typami

Próbuję przekierować dane wyjściowe funkcji printf do pliku w systemie Windows. Używam ctypes z python3, aby wywołać funkcje. Mój kod to:

import os, sys
from ctypes import *

if __name__ == '__main__':

 print("begin")
 saved_stdout=os.dup(1)
 test_file=open("TEST.TXT", "w")
 os.dup2(test_file.fileno(), 1)
 test_file.close()
 print("python print")
 cdll.msvcrt.printf(b"Printf function 1\n")
 cdll.msvcrt.printf(b"Printf function 2\n")
 cdll.msvcrt.printf(b"Printf function 3\n")
 os.dup2(saved_stdout, 1)
 print("end")

Ale kiedy uruchomię kod z Eclipse, otrzymuję na ekranie następujące informacje:

begin
end
Printf function 1
Printf function 2
Printf function 3

... i następujące w TEST.txt

python print

Kiedy uruchamiam to z cmd, to jest to, co jest na ekranie:

begin
end

..i to jest w TEST.txt:

python print

Kiedy komentuję drugidup2() oświadczenie np.

import os, sys
from ctypes import *
if __name__ == '__main__':

    print("begin")
    saved_stdout=os.dup(1)
    test_file=open("TEST.TXT", "w")
    os.dup2(test_file.fileno(), 1)
    test_file.close()
    print("python print")
    cdll.msvcrt.printf(b"Printf function 1\n")
    cdll.msvcrt.printf(b"Printf function 2\n")
    cdll.msvcrt.printf(b"Printf function 3\n")
    #os.dup2(saved_stdout, 1)
    print("end")

Z Eclipse na ekranie:

begin

... iw pliku TEST.txt:

python print
end
Printf function 1
Printf function 2
Printf function 3

Z cmd na ekranie:

begin

... iw pliku TEST.txt:

python print
end

Jestem teraz całkowicie zmieszany. Czytam wszystkie wątki przekierowania tutaj na StackOverflow i nie mogę zrozumieć, co się dzieje. W każdym razie to, co zebrałem, to to, że funkcje C mają dostęp do stdout, które jest bezpośrednio powiązane z deskryptorem pliku, podczas gdy python używa specjalnego obiektu dla tego - stdout File Object. Więc elementarnesys.stdout=*something* nie działa z ctypami. Próbowałem nawetos.fdopen(1) na wyjściu dup2-ed, a następnie wywołanieflush() po każdymprintf oświadczenie, ale to nie działa ponownie. Jestem teraz całkowicie pozbawiony pomysłów i byłbym wdzięczny, gdyby ktoś miał na to rozwiązanie.

questionAnswers(1)

yourAnswerToTheQuestion