2010年4月6日火曜日

Python から Cを利用

PythonからCのライブラリを利用するときに、Pythonのリストオブジェクトをどのように利用するか調べてみた。

リストオブジェクトに入っている文字列を表示し、リストオブジェクト内のオブジェクト数を返却するCプログラムを、test2モジュールとして作成してみた。

#include <Python.h>

static PyObject *
test2_listnum(PyObject *self, PyObject *args)
{
PyObject *list;
PyObject *item;
char *itemstr;
int num;
int i;
if (!PyArg_ParseTuple(args, "O", &list)){
return NULL;
}
num = PyList_Size(list);

for (i=0;iitem = PyList_GetItem(list, i);
itemstr = PyString_AsString(item);
printf("%s\n", itemstr);
}

return Py_BuildValue("i", num);
}


これをビルドするためのMakefile。

CC = gcc

.c.o:
$(CC) -fPIC -I"/usr/include/python2.4" -c $<

all: test2

clean:
rm -r *.o; rm -r *.so

test2: test2.o
$(CC) $(OPT) -Wl,-soname,$@.so -shared -o $@.so $^


そして、テスト用のPythonプログラム。

#!/usr/bin/python

import test2

a = []
a.append("test1")
a.append("test2")
num = test2.listnum(a)
print num



0 件のコメント:

コメントを投稿