associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

PythonComC

PythonComC

Exemplo básico de extenção de python atraves de C retirado de Extending and Embedding

Mais sobre em:

http://pyspanishdoc.sourceforge.net/

http://docs.python.org/

Como fazer um binding em C para Python

Código em C

void initspam(void); /* Forward */

static PyObject *spam_system(PyObject *self, PyObject *args);

static PyObject *
spam_system(self, args)
    PyObject *self;
    PyObject *args;
{
    char *orden;
    int sts;

    if (!PyArg_ParseTuple(args, "s", &orden))
        return NULL;
    sts = system(orden);
    return Py_BuildValue("i", sts);
}

static PyMethodDef SpamMethods[] = {
    {"system",  spam_system, METH_VARARGS},
    {NULL,      NULL}        /* centinela */
};

void
initspam()
{
    (void) Py_InitModule("spam", SpamMethods);
}

int main(int argc, char **argv)
{
    /* Pasa argv[0] para o intérprete de Python */
    Py_SetProgramName(argv[0]);

    /* Inicializa o intérprete de Python.  Requerido. */
    Py_Initialize();

    /* Agrega un módulo estático */
    initspam();

    return 1;
}

Compilando

gcc -pthread -DNDEBUG -g -O3 -Wall -Wstrict-prototypes \
        -fPIC -DMAJOR_VERSION=1 -DMINOR_VERSION=0 -I/usr/include \
        -I/usr/include/python2.4 -c spammodule.c -o spammodule.o
gcc -pthread -shared spammodule.o -L/usr/lib -lm -o spammodule.so

Exemplo de uso

   1 >>> import spam
   2 >>> spam.
   3 spam.__class__         spam.__hash__          spam.__repr__
   4 spam.__delattr__       spam.__init__          spam.__setattr__
   5 spam.__dict__          spam.__name__          spam.__str__
   6 spam.__doc__           spam.__new__           spam.system
   7 spam.__file__          spam.__reduce__
   8 spam.__getattribute__  spam.__reduce_ex__
   9 >>> status = spam.system('ls')
  10 spammodule.c  spammodule.o  spammodule.so
  11 >>> status
  12 0
  13 >>>

Volta para CookBook.


WiliamAlvesDeSouza