перенаправление stdout с помощью ctypes

Я пытаюсь перенаправить вывод функций printf в файл в Windows. Я'm используя ctypes с python3 для вызова функций. Мой код:

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

Но когда я запускаю код из Eclipse, я получаю на экране следующее:

begin
end
Printf function 1
Printf function 2
Printf function 3

... и следующее в TEST.txt

python print

Когда я запускаю это из cmd, это то, что на экране:

begin
end

..и это в TEST.txt:

python print

Когда я закомментирую второйdup2() утверждение, например

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

Из Eclipse на экране:

begin

... и в файле TEST.txt:

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

Из cmd, на экране:

begin

... и в файле TEST.txt: I '

python print
end

Я сейчас совершенно сбит с толку. Я прочитал все темы перенаправления здесь, на StackOverflow, и я могуне понимаю, чтопродолжается Во всяком случае, что яМы поняли, что функции C обращаются к stdout, который связан непосредственно с дескриптором файла, в то время как python использует специальный объект для этого - stdout File Object. Так что элементарноsys.stdout=*something* Безразлично»работать с ctypes. Я'мы даже пыталисьos.fdopen(1) на выходе dup2-ed, а затем вызовflush() после каждогоprintf заявление, но это неснова не работает Я'Я полностью вне идей и был бы признателен, если у кого-то есть решение для этого.

Ответы на вопрос(1)

Ваш ответ на вопрос