Вызов функции на Python из C++ на Ubuntu

 
0
 
Python
ava
Sheldon | 26.07.2010, 16:12
Доброго времени суток!

У меня есть Python-модуль и C++ - программа. Я пытаюсь из программы вызвать функцию, описанную в py-модуле и вернуть результат. Пользуюсь Ubuntu (!!).
Взял для уверенности пример из документации:
http://www.python.org/doc//current/extending/embedding.html
Он тоже отказывается возвращать результат.

Вот С++ код:


----1.с-------
#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("test");
/* Error checking of pName left out */

pModule = PyImport_Import(pName);
Py_DECREF(pName);

if (pModule != NULL) {
pFunc = PyObject_GetAttrString(pModule, "computeMean");
/* 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;
}



Вот содержимое py-модуля:
-------test.py--------

def computeMean(a, b): return (a+b)/2
def Met: return 20
if __name__ == "__main__": print "Py: Main"
else: print "Py:Module"


Вот команды компилятору
$ sudo gcc -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions -I/usr/include/python2.6 -I/home/salmon/Рабочий\ стол/1 -I. -lpthread -lz -lutil -lpython2.6 -lm -L/usr/lib/python2.6/config -o call 1.c

$ ./call test Met

Вот аутпут, возникающий при запуске call:
AttributeError: 'module' object has no attribute 'computeMean'

Помогите, пожалуйста
Kommentare (0)

Kommentare werden nicht hinzugefügt

Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
  Sheldon
advanced
Absenden