最近用在Qt里调用python,遇到了很多问题,记录一下。
一开始是直接普通的调用流程:
void testPython(){
// 连接python
// 初始化python解释器
Py_Initialize();
PyObject * pModule = NULL;
PyObject * pFunc = NULL;
// 设置python文件路径
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('C:/postgraduate/LVPredictor-software/LVPredictor/')"); // 设置绝对路径
pModule = PyImport_ImportModule("predictModel");//调用的Python文件名 py文件放置exe同级
if (pModule == NULL)
{
PyErr_Print();
cout << "PyImport_ImportModule Fail!" << endl;
return;
}
// 设置调用的函数名
pFunc = PyObject_GetAttrString(pModule, "predict");
// 转换输入数据,将字典输入
PyObject* dict = PyDict_New();
for(auto data : inputData){
PyDict_SetItem(dict, Py_BuildValue("s", data.first.c_str()), Py_BuildValue("d", data.second)); // 这里要注意"s"表示c类型的字符串,所以要加c_str()否则报错
}
// 创建参数对象
PyObject* args = PyTuple_New(1);
PyTuple_SetItem(args, <