Python C Embedded ! Attribute Error

Discussion in 'Python' started by pycraze, Jul 20, 2007.

  1. pycraze

    pycraze Guest

    Hi ,

    I am using the below C code so that i can embed a Python Code and
    get input from a python function and use it in C code .

    Below is the C Code


    #include <Python.h>

    int
    main(int argc, char *argv[])
    {
    PyObject *pName, *pModule, *pDict, *pFunc;
    PyObject *pArgs, *pValue;
    int i;

    if (argc < 3) {
    fprintf(stderr,"Usage: call pythonfile funcname [args]\n");
    return 1;
    }

    Py_Initialize();
    pName = PyString_FromString(argv[1]);
    /* Error checking of pName left out */

    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append('/home/dennis/workplace/
    aps098')");
    PyRun_SimpleString("sys.path.append('/home/dennis/workplace/aps098/
    lib')");
    PyRun_SimpleString("import server, logger,config, ntlm_procs,
    config_affairs ");
    pModule = PyImport_Import(pName);
    Py_DECREF(pName);

    if (pModule != NULL) {
    pFunc = PyObject_GetAttrString(pModule, argv[2]);
    /* pFunc is a new reference */

    if (pFunc && PyCallable_Check(pFunc)) {
    pArgs = PyTuple_New(argc - 3);
    for (i = 0; i < argc - 3; ++i) {
    pValue = PyInt_FromLong(atoi(argv[i + 3]));
    if (!pValue) {
    Py_DECREF(pArgs);
    Py_DECREF(pModule);
    fprintf(stderr, "Cannot convert argument\n");
    return 1;
    }
    /* pValue reference stolen here: */
    PyTuple_SetItem(pArgs, i, pValue);
    }
    pValue = PyObject_CallObject(pFunc, pArgs);
    Py_DECREF(pArgs);
    if (pValue != NULL) {
    printf("Result of call: %ld\n", PyInt_AsLong(pValue));
    Py_DECREF(pValue);
    }
    else {
    Py_DECREF(pFunc);
    Py_DECREF(pModule);
    PyErr_Print();
    fprintf(stderr,"Call failed\n");
    return 1;
    }
    }
    else {
    if (PyErr_Occurred())
    PyErr_Print();
    fprintf(stderr, "Cannot find function \"%s\"\n", argv[2]);
    }
    Py_XDECREF(pFunc);
    Py_DECREF(pModule);
    }
    else {
    PyErr_Print();
    fprintf(stderr, "Failed to load \"%s\"\n", argv[1]);
    return 1;
    }
    Py_Finalize();
    return 0;
    }


    The python code is a simple code

    def pr(var):
    print var

    I am getting error

    AttributeError: 'module' object has no attribute 'print'
    Cannot find function "print"


    I am a newbie to python . I need some to embed python in C . Anyone
    Pls help
     
    pycraze, Jul 20, 2007
    #1
    1. Advertising

  2. pycraze

    Miki Guest

    Hello,

    > I am using the below C code so that i can embed a Python Code and
    > get input from a python function and use it in C code .
    >
    > Below is the C Code

    [snipped]

    > I am getting error
    >
    > AttributeError: 'module' object has no attribute 'print'
    > Cannot find function "print"

    How do you run your program (I suspect with 'pr pr print 1', should be
    'pr pr pr 1').

    FWIW, the following simplified program works:
    #include <Python.h>

    int
    main(int argc, char *argv[])
    {
    PyObject *modname, *module, *args, *value, *func;

    Py_Initialize();

    PyRun_SimpleString("import sys; sys.path.append(\".\")");

    modname = PyString_FromString("pr");
    module = PyImport_Import(modname);
    Py_DECREF(modname);

    if (NULL == module) {
    fprintf(stderr, "error: can't load\n");
    Py_Finalize();
    return 1;
    }

    func = PyObject_GetAttrString(module, "pr");

    args = PyTuple_New(1);
    value = PyLong_FromLong(10);
    PyTuple_SetItem(args, 0, value);

    PyObject_CallObject(func, args);

    Py_Finalize();
    return 0;
    }

    HTH,
    --
    Miki <>
    http://pythonwise.blogspot.com
     
    Miki, Jul 20, 2007
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Colin Paul Gloster
    Replies:
    48
    Views:
    1,974
    Colin Paul Gloster
    Apr 10, 2007
  2. johnny
    Replies:
    5
    Views:
    757
    johnny
    Dec 10, 2006
  3. Thomas Dodds

    Databind an embedded control in an embedded datagrid

    Thomas Dodds, Jul 26, 2004, in forum: ASP .Net Datagrid Control
    Replies:
    0
    Views:
    431
    Thomas Dodds
    Jul 26, 2004
  4. Trans
    Replies:
    11
    Views:
    337
    micathom
    Sep 5, 2007
  5. Num GG
    Replies:
    2
    Views:
    415
    Num GG
    Nov 17, 2008
Loading...

Share This Page