如何从Python接收C结构体
我有一个独立的Python模块,用来分析一些原始数据。这个模块运行得非常好。
现在我需要把这个Python模块生成的输出结果放到C语言的代码里,以便对这些输出进行进一步处理。
大致的流程是这样的:
- C语言代码会调用这个Python模块。
- Python模块会把生成的结果填充到一个C语言的结构体中,然后以某种方式把它传递给C语言代码。
那么,怎样才能在C语言代码中获取Python模块的结果呢?
我是不是可以用下面这样的方式来填充结果呢?
from ctypes import *
class result(Structure):
_fields_ = [("status", c_int), ...]
1 个回答
3
我觉得你可能不想使用ctypes模块——这个模块是用来从Python代码访问DLL和共享对象的,而不是反过来。
你没有说明C程序是怎么调用Python模块的。它会:
用类似
popen
的方式从C调用Python脚本吗?如果是这样的话,你可以在Python中把数据写入stdout
,然后在C中适当地解析这些数据。你需要自己设计一个小协议来处理这个。这个协议可以是临时的,或者你可以使用现有的格式,比如JSON,C和Python都有相关的库可以使用。把Python虚拟机嵌入到你的C程序中吗?那样的话,你需要把C中的值转换成合适的
Py*
值,并放入一个PyTuple
中,这样你就可以从C传递给Python函数作为参数。Python函数的输出会是一个PyObject
,你需要在C中解包它才能获取数据。
在这两种情况下,你都需要自己处理打包和解包的过程。