Перехват вывода на печать из общей библиотеки, вызываемой из python с помощью модуля ctypes

Я работаю с общей библиотекой, которая вызывается через модуль 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?

7
задан ncRubert 28 February 2012 в 19:42
поделиться