Difference between revisions of "Integrating C Code with Python"
Jump to navigation
Jump to search
PeterHarding (talk | contribs) |
PeterHarding (talk | contribs) |
||
| Line 1: | Line 1: | ||
=Overview= | =Overview= | ||
=Examples= | |||
==Simaple== | |||
===Makefile=== | |||
<pre> | |||
#--------------------------------------------------------------------- | |||
all: | |||
gcc -I /usr/local/include/python2.5 -fPIC -c test.c | |||
gcc -shared -o test.so test.o | |||
#--------------------------------------------------------------------- | |||
clean: | |||
-/bin/rm -rf *.o | |||
#--------------------------------------------------------------------- | |||
</pre> | |||
===test.c=== | |||
Note, on the system this demo was implemented on a version of Python 2.5 had been built from source and installed into /usr/local, so Python.h and other Python header files were located in /usr/local/include/python2.5/ | |||
<pre> | |||
#include "Python.h" | |||
static PyObject *TestError; | |||
//------------------------------------------------------------------------------ | |||
static PyObject* test_system(PyObject *self, PyObject *args); | |||
//------------------------------------------------------------------------------ | |||
static PyMethodDef TestMethods[] = { | |||
{"system", test_system, METH_VARARGS, "Execute a shell command."}, | |||
{NULL, NULL, 0, NULL} /* Sentinel */ | |||
}; | |||
//------------------------------------------------------------------------------ | |||
static PyObject * | |||
test_system(PyObject *self, PyObject *args) | |||
{ | |||
const char *command; | |||
int sts; | |||
if (!PyArg_ParseTuple(args, "s", &command)) | |||
return NULL; | |||
sts = system(command); | |||
return Py_BuildValue("i", sts); | |||
} // test_system | |||
//------------------------------------------------------------------------------ | |||
PyMODINIT_FUNC | |||
inittest(void) | |||
{ | |||
PyObject *m; | |||
m = Py_InitModule("test", TestMethods); | |||
TestError = PyErr_NewException("test.error", NULL, NULL); | |||
Py_INCREF(TestError); | |||
PyModule_AddObject(m, "error", TestError); | |||
} // inittest | |||
//------------------------------------------------------------------------------ | |||
</pre> | |||
=references= | =references= | ||
Revision as of 16:07, 19 November 2008
Overview
Examples
Simaple
Makefile
#---------------------------------------------------------------------
all:
gcc -I /usr/local/include/python2.5 -fPIC -c test.c
gcc -shared -o test.so test.o
#---------------------------------------------------------------------
clean:
-/bin/rm -rf *.o
#---------------------------------------------------------------------
test.c
Note, on the system this demo was implemented on a version of Python 2.5 had been built from source and installed into /usr/local, so Python.h and other Python header files were located in /usr/local/include/python2.5/
#include "Python.h"
static PyObject *TestError;
//------------------------------------------------------------------------------
static PyObject* test_system(PyObject *self, PyObject *args);
//------------------------------------------------------------------------------
static PyMethodDef TestMethods[] = {
{"system", test_system, METH_VARARGS, "Execute a shell command."},
{NULL, NULL, 0, NULL} /* Sentinel */
};
//------------------------------------------------------------------------------
static PyObject *
test_system(PyObject *self, PyObject *args)
{
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
return NULL;
sts = system(command);
return Py_BuildValue("i", sts);
} // test_system
//------------------------------------------------------------------------------
PyMODINIT_FUNC
inittest(void)
{
PyObject *m;
m = Py_InitModule("test", TestMethods);
TestError = PyErr_NewException("test.error", NULL, NULL);
Py_INCREF(TestError);
PyModule_AddObject(m, "error", TestError);
} // inittest
//------------------------------------------------------------------------------