Я пытаюсь вызвать простую python функцию из cpp.
Ниже приведен код cpp:
#include <iostream>
#include <Python.h>
#include <numpy/arrayobject.h>
using namespace std;
void init_numpy()
{
import_array();
}
int main()
{
char dir[500];
cout << "Enter directory: \n";
cin >> dir;
Py_Initialize();
const char *scriptDirectoryName = dir;
PyObject *sysPath = PySys_GetObject("path");
PyObject *path = PyString_FromString(scriptDirectoryName);
int result = PyList_Insert(sysPath, 0, path);
PyObject *pModule = PyImport_ImportModule("mytest");
init_numpy();
double getItem[2] ;
getItem[0] = getItem[1] = 2;
npy_intp dims = 2 ;
PyObject* arrayToPass = PyArray_SimpleNewFromData(1, &dims, NPY_DOUBLE , (void *)getItem);
PyObject* myFunction = PyObject_GetAttrString(pModule,(char*)"stuff");
//PyObject* args = PyTuple_Pack(1,PyFloat_FromDouble(getItem));
PyObject* myResult = PyObject_CallObject(myFunction, arrayToPass);
//double resultasd = PyFloat_AsDouble(myResult);
//cout << resultasd << endl;
Py_Finalize();
return 0;
}
А вот мой код python : mytest.py
def stuff(a):
x = a[1]
return x
Это просто тестирование большего патча, который я пишу, но методология та же.
Я получаю эту ошибку:
Exception TypeError: 'argument list must be a tuple' in <module 'threading' from '/usr/lib/python2.7/threading.pyc'> ignored
Я искал несколько тем, но у всех была уникальная опечатка или ошибка.
Любые предложения, где я делаю неправильно?
Я собираю как:
g++ -I /usr/include/python2.7/ che.cpp -lpython2.7 -o linkArr