Доброго времени суток!
У меня есть 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'
Помогите, пожалуйста |