- C++调用Python需要将python安装目录下的include路径引用到项目工程中,将python对应的动态库python_version.lib目录链接。
- 在Qt中调用Python时,会出现编译报错问题,错误原因在于Qt的槽函数关键字和Python头文件中关键字重复,此时需要修改Python引用的头文件中的关键字即可将该编译错误解决。
- C++调用Python的一般步骤代码如下:
Py_Initialize();//python初始化接口 if (!Py_IsInitialized()) { printf("init python error\n"); return; } PyObject *m_pInterfaceModule = NULL;//调用python文件的对象 PyRun_SimpleString("import os"); //在C++中执行python语句,导入相关python中的模块 PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('./')"); m_pInterfaceModule = PyImport_ImportModule("Interface");//设置要调用的python文件的文件名 if (m_pInterfaceModule == NULL) { PyErr_Print(); return; } PyObject *pFun = NULL;//调用函数的对象 pFun = PyObject_GetAttrString(m_pInterfaceModule,functionName.c_str());//functionName为要调用的函数名称 if (NULL == pFun) { PyErr_Print(); return ; } //简单处理可将所有数据类型都归结为有参数传递的类型,在传入之前将参数统一转换为string类型 PyObject* pRet;//被调用的函数返回值的对象 PyObject* pArg;//参数绑定的返回值 pArg = Py_BuildValue("(s)", argValue.c_str()); pRet = PyObject_CallObject(pFun, pArg);//pFun为被调用函数名,pArg为构造的绑定参数 //pRet = PyObject_CallObject(pFun, NULL);//没有入参的调用,只需要函数名称,参数为NULL if (NULL == pRet) { PyErr_Print(); return ""; } char* res; int ret = PyArg_Parse(pRet, "s", &res);//返回值为字符串 if (!ret) { PyErr_Print(); return ""; } cout << "res:" << res << endl; //输出结果
- 对于Python文件中的错误在C++中查看采用PyErr_Print()进行打印。