如何从Python接收/获取C结构

时间:2011-12-21 06:33:02

标签: python struct ctypes

我有一个独立的Python模块,用于对一些原始数据进行分析。该模块运作良好。

现在我需要C源代码中Python模块生成的输出,它将对输出进行进一步处理。

以下是流程的粗略概念:

  1. C源代码将调用Python模块。
  2. Python模块会将生成的结果填充到C结构中 然后以某种方式将它传递给C源。
  3. 那么从C源代码中获取Python模块结果的最佳方法是什么?

    我应该使用以下内容来填充结果吗?

    from ctypes import *
    class result(Structure):       
        _fields_ = [("status", c_int), ...]
    

1 个答案:

答案 0 :(得分:3)

我认为你不想使用ctypes模块 - 该模块用于从 Python代码访问DLL和共享对象,而不是相反。

您没有指定C程序如何调用Python模块。它会

吗?
  • 使用来自C的popen之类的东西来调用Python脚本?如果是这样,那么您可以在Python中将数据写入stdout并在C中正确解释数据。您必须为此设计自己的小协议。这可以是ad-hoc协议,或者你可以使用像JSON这样的现有格式,你可以为它找到C和Python的库。

  • embed the Python VM in your C program?然后,您需要将C值转换为适当的Py*值并将它们放入PyTuple中,您可以将其作为参数传递给Python函数来自C. Python函数的输出将是PyObject,您必须解压缩(在C中)才能获取数据。

在这两种情况下,您都需要自己打包并打开包装。