Python C Embedded ! Attribute Error

P

pycraze

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
 
M

Miki

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,
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,955
Messages
2,570,117
Members
46,705
Latest member
v_darius

Latest Threads

Top