Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Python接收/获取C结构_Python_Struct_Ctypes - Fatal编程技术网

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

如何从Python接收/获取C结构,python,struct,ctypes,Python,Struct,Ctypes,我有一个独立的Python模块,用于对一些原始数据执行分析。这个模块工作得很好 现在我需要Python模块在C源代码中生成的输出,它将对输出进行进一步处理 以下是流动的大致概念: C源代码将调用Python模块 Python模块将把生成的结果填充到C结构中,然后 然后以某种方式将其传递给C源代码 那么,从C源代码中的Python模块获得结果的最佳方法是什么 我是否应该使用以下内容来填充结果 from ctypes import * class result(Structure):

我有一个独立的Python模块,用于对一些原始数据执行分析。这个模块工作得很好

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

以下是流动的大致概念:

  • C源代码将调用Python模块
  • Python模块将把生成的结果填充到C结构中,然后 然后以某种方式将其传递给C源代码
  • 那么,从C源代码中的Python模块获得结果的最佳方法是什么

    我是否应该使用以下内容来填充结果

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

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

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

    • 使用类似于C中的
      popen
      调用Python脚本?如果是这样,那么您可以用Python将数据写入stdout,并用C语言适当地解释数据。您必须为此设计自己的小协议。这可以是一个临时协议,也可以使用JSON等现有格式,您可以找到C和Python的库

    • 然后,您需要将C值转换为适当的
      Py*
      值,并将它们放入
      PyTuple
      中,您可以将其作为参数从C传递给Python函数。Python函数的输出将是a,您必须将其解压缩(在C中)以获取数据


    在这两种情况下,您都需要自己打包和解包。

    这不是最漂亮的方法,但我认为最简单的方法是将python模块的输出转储到一个临时文件,然后用C读取该文件。我认为这应该是最后一种方法了?非常感谢。目前,我正在使用popen调用python脚本。因为我需要一个快速的解决方案,所以我将从标准输出读取/写入数据。