[Q] How Can I call python function from C source?

Dave Kuhlman dkuhlman at rexx.com
Thu Jun 27 13:11:11 EDT 2002


Kim Chul Min wrote:

> Hello there,
> 
> I want to call python function from c source.
> 
> for example,
> 
> in file "main.c"
> --------------------------------------------------------------
> int main(void)
> {
> 
>     /** want to call python function add(a,b) that return a+b **/
> 
> }
> --------------------------------------------------------------
> 
> in the file "add.py"
> --------------------------------------------------------------
> def add(a,b):
>     return(a+b)
> --------------------------------------------------------------
> 
> Can I call any function that written by python from C source ?
> 
> If possible, can anyone show me simple example like above??
> 
> Plz,,, Help me....Thankx in advance...
> 
> Ciao,
> Farangan Xavio
> cmkim at shinbiro.com

Here is a simple example.

You will find the following especially helpful:

    http://www.python.org/doc/current/api/importing.html
    http://www.python.org/doc/current/api/object.html

/* =========================================== */

#include "Python.h"

int main(int argc, char ** argv)
{
    PyObject * module;
    PyObject * function;
    PyObject * result;
    long cresult;
    int arg1;
    int arg2;

    if (argc != 3)
    {
        printf("Usage: test1 <arg1> <arg2>\n");
        exit(-1);
    } /* if */

    arg1 = atoi(argv[1]);
    arg2 = atoi(argv[2]);

    Py_Initialize();
    module = PyImport_ImportModule("add");
    if (PyObject_HasAttrString(module, "add"))
    {
        function = PyObject_GetAttrString(module, "add");
        if (PyCallable_Check(function))
        {
            result = PyObject_CallFunction(function, "ii", arg1, arg2);
            cresult = PyLong_AsLong(result);
            printf("arg1: %d  arg2: %d  result: %d\n", arg1, arg2, cresult);
        }
        else
        {
            printf("Error -- attribute is not a function/method\n");
        } /* if */
    }
    else
    {
        printf("Error -- Module does not contain \"add\" function.\n");
    } /* if */
    Py_Exit(0);
} /* main */

/* =========================================== */



-- 
Dave Kuhlman
dkuhlman at rexx.com
http://www.rexx.com/~dkuhlman




More information about the Python-list mailing list