Я работаю с общей библиотекой, которая вызывается через модуль ctypes. Я хотел бы перенаправить stdout, связанный с этим модулем, в переменную или файл, к которому я могу обратиться в своей программе. Однако ctypes использует отдельный stdout от sys.stdout.
Я продемонстрирую проблему, которую я испытываю с libc. Если кто-либо копирует и вставляет код, ему, возможно, придется изменить имя файла в строке 2.
import ctypes
libc = ctypes.CDLL('libc.so.6')
from cStringIO import StringIO
import sys
oldStdOut = sys.stdout
sys.stdout = myStdOut = StringIO()
print 'This text gets captured by myStdOut'
libc.printf('This text fails to be captured by myStdOut\n')
sys.stdout = oldStdOut
myStdOut.getvalue()
Могу ли я как-то перехватить stdout, связанный с загруженной библиотекой ctypes?