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

Seu texto de busca "linkto:"PythonComC"" não retornou nenhum resultado. Por favor mude os termos do texto, para mais informações veja HelpOnSearching.
(!) Considere fazer uma busca completa do texto com seus próprios termos.

Excluir mensagem

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