本篇文章考虑c++调用的py文件中调用了其他py文件的情况
1.首先给出被调用的py文件demo03.py
import demo as d
def func1(a,b):
return d.add(a,b)
其中,demo是另一个py文件,代码如下:
def add(a, b):
c = a + b
print(f"{a} + {b} = {c}")
return c
2.在vs中的callPython.cpp执行调用demo03.py的代码:
#include <iostream>
#include <Python.h>
void test()
{
Py_Initialize(); //初始化
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./../scripts')"); //定位到所要调用py文件的文件夹
PyImport_ImportModule("demo"); //引入demo03.py文件中所导入的demo.py
PyObject* pModule = NULL;
PyObject* pFunc = NULL;
PyObject* pArg = NULL;
pModule = PyImport_ImportModule("demo03"); //导入demo03.py模块,注意文件名字大小写
pFunc = PyObject_GetAttrString(pModule, "func1"); //demo03.py中的函数名
pArg = Py_BuildValue("(i,i)", 3, 7); //给函数中两个整形参数赋值
PyObject_CallObject(pFunc, pArg);//函数调用
Py_Finalize();//调用Py_Finalize,释放资源,和Py_Initialize相对应的
}
int main() {
test();
return 0;
}
为了使被调用的demo03.py能够成功运行,demo03.py中导入的demo.py文件需要放在和demo03.py同一目录下(即放在前文所述的scripts文件中),并且需要在c++程序中,在调用emo03.py的代码之前写入以下语句
PyImport_ImportModule("demo"); //引入demo03.py文件中所导入的demo.py