如何用ctypes在python中“捕获”c printf?

时间:2010-06-28 11:38:11

标签: python c printf ctypes

我希望这是微不足道的,我只是没有在教程中找到它。我正在编写'监督'c代码的python代码,也就是我用python中的ctypes运行c代码。现在我想“捕获”c'printfs'来处理c代码输出的数据。知道怎么会这样做吗?

由于

2 个答案:

答案 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读取的东西。

相关问题