我希望这是微不足道的,我只是没有在教程中找到它。我正在编写'监督'c代码的python代码,也就是我用python中的ctypes运行c代码。现在我想“捕获”c'printfs'来处理c代码输出的数据。知道怎么会这样做吗?
由于
答案 0 :(得分:2)
您可以在从stdout
代码写入之前截取C
,然后处理输出值。
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__
但是,将缓冲区传递给C代码会更容易和更好,而不是printf
输出值,而是将它们写在提供的缓冲区中。
或者,更好的是,你可以传递byref
一个c_char_p
,在C
代码中为它分配内存,用输出值更新缓冲区然后使用{{1}中的缓冲区1}}。不要忘记释放内存(你应该为Python
函数创建一个ctypes
包装器。)
答案 1 :(得分:0)
好printf
只是将其输出写入stdout
文件指针引用的内容。我不确定你是如何执行C程序的,但应该可以将C程序的stdout
重定向到你可以用Python读取的东西。