È possibile intercettare stdout
prima di essere scritto dal codice C
, quindi elaborare il valore di uscita.
import sys
import StringIO
buffer = StringIO.StringIO()
# redirect stdout to a buffer
sys.stdout = buffer
# call the c code with ctypes
# process the buffer
# recover the old stdout
sys.stdout = sys.__stdout__
Tuttavia, sarebbe più facile e più piacevole per passare un buffer per il codice C, invece di printf
ing valori di uscita che li scriverà nel buffer disponibile.
O, meglio ancora, si poteva passare byref
un c_char_p
, allocare memoria per all'interno del codice C
, aggiornare il buffer con il valore di uscita quindi utilizzare il buffer in Python
. Non dimenticare di deallocare la memoria (dovresti creare un wrapper ctypes
per la funzione free
).
fonte
2010-06-28 15:09:03
Vuoi sovraccaricare il C printf in Python? – luc
Se sovraccarico, su quale sistema operativo? – Arlaharen
Se il sovraccarico risolvesse il mio problema, proverei. Io uso Ubuntu 9.10. – Framester