Я пытаюсь сделать вызов функции модуля python из моего файла cpp.Вызов функции Python из C++
Вызов я сделал это следующим образом:
#include <iostream>
#include "Python.h"
int
main(int argc, char** argv)
{
Py_Initialize();
PyObject *pName = PyString_FromString("tmpPyth");
PyObject *pModule = PyImport_Import(pName);
std::cout<< "Works fine till here";
PyObject *pDict = PyModule_GetDict(pModule);
if (pModule != NULL) {
PyObject *pFunc = PyObject_GetAttrString(pDict, "pyFunc");
if(pFunc != NULL){
PyObject_CallObject(pFunc, NULL);
}
}
else
std::cout << "Python Module not found";
return 0;
}
Мой модуль питона определяется следующим образом:
import numpy
import scipy
import matplotlib
from scipy import stats
def blah():
baseline = [9.74219, 10.2226, 8.7469, 8.69791, 9.96442, 9.96472, 9.37913, 9.75004]
follow_up = [9.94227,9.46763,8.53081,9.43679,9.97695,10.4285,10.159,8.86134]
paired_sample = stats.ttest_rel(baseline , follow_up)
print "The t-statistic is %.3f and the p-value is %.3f." % paired_sample
код в файле CPP работает отлично до 1 «СТД :: cout ", но затем заканчивается тем, что дает мне« seg fault ». Запуск кода python работает отлично и дает желаемый результат.
Я не могу понять, что происходит не так. Любая помощь будет оценена. (Обратите внимание, что программа правильно и корректно компилируется до 1-го «cout»)
Я могу вам сказать, что это segfaulting из 'PyObject * pDict = PyModule_GetDict (pModule);' , Похоже, что он не может загрузить модуль вообще. – vaidik
В идеале эта строка должна быть в блоке if после того, как вы убедитесь, что модуль загружен. – vaidik