Получение вывода на печать из общей библиотеки, вызываемой из python, с помощью модуля ctypes
Я работаю с разделяемой библиотекой, которая вызывается через модуль ctypes. Я хотел бы перенаправить стандартный вывод, связанный с этим модулем, в переменную или файл, к которому я могу получить доступ в моей программе. Однако ctypes использует отдельный стандартный вывод из 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()
Есть ли способ, которым я могу захватить стандартный вывод, связанный с загруженной общей библиотекой ctypes?