通过SWIG在python函数中使用List数据类型

时间:2013-05-30 08:02:58

标签: python c swig glib

我正在创建一个python脚本,它通过SWIG调用一些C函数。

调用大多数函数时没有问题,但是一个特定函数将GList数据类型作为参数:

C函数沿着以下行定义:

void some_function(GList *guid_list)

我试图通过它的SWIG创建的python模块来调用它

some_list = ['a', 'b', 'c']
module_from_swig.some_function(some_list)

但是收到以下错误:

Traceback (most recent call last):
.
.
.
File "/usr/local/lib/python2.7/dist-packages/module_from_swig.py", line 1828, in some_function
    return _module_from_swig.some_function(*args)

TypeError: in method 'some_function', argument 1 of type 'GList *'

我假设我需要以某种方式将python列表转换为Glist,但不确定如何执行此操作。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

首先,您的SWIG界面文件需要GList的定义,然后您可能能够使用最小的SWIG文件,例如:

%module MyModule

%inline %{
#include "Glist.h"
#include "functions.h"
%}

并使用如下函数:

>>> import MyModule
>>> glist = MyModule.GList()
>>> glist.some_field = some_value
>>> glist.some_other_field = some_value
>>> MyModule.some_function(glist)

这很模糊但不是很多。如果GList很复杂,则可能需要编写typemap。提供函数和头文件的简单示例以及您正在使用的SWIG .i文件(理想情况下,编译并演示问题),您将获得更好的反馈。