Można przechwycić kod stdout
przed zapisaniem go z kodem C
, a następnie przetworzyć wartość wyjściową.
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__
Jednak byłoby łatwiej i ładniej przekazać bufor do kodu C, a zamiast printf
-ing wartości wyjściowe można zapisać je w dostarczonym buforze.
Albo, jeszcze lepiej, można przejść do c_char_p
byref
, przydzielić pamięci dla niego wewnątrz kodu C
zaktualizować bufor z wartością wyjściową a następnie użyć bufor w Python
. Nie zapomnij zwolnić pamięci (powinieneś utworzyć opakowanie ctypes
dla funkcji free
).
Czy chcesz przeładować printf C w Pythonie? – luc
Jeśli przeciążasz, na jakim systemie operacyjnym? – Arlaharen
Jeśli przeciążenie rozwiąże mój problem, spróbuję. Używam Ubuntu 9.10. – Framester