C++调用python
  TEZNKK3IfmPf 2023年11月15日 22 0

准备python脚本

def Hello():
    print("hello world!")

def add(x,y):
    print("add",x,"and",y)
    return x+y
  1. 包含目录中增加Python的include目录
  2. 库目录增加Python的libs目录
  3. 链接器>输入中增加附加依赖项即pythonxx.lib,其中xx文版本号

C++文件

#include <iostream>
#include "include/Python.h"

using namespace std;

int main()
{
	//Py_SetPythonHome(L"./"); 打包时设置解释器路径
    							//如果不设置需要在环境变量中增加 pythonhome和pythonpath
    							//一定要重启
	Py_Initialize();
	cout << "初始化成功" << endl;
	PyRun_SimpleString("import sys");
	PyRun_SimpleString("sys.path.append('./')");
	
	PyObject* pModule = PyImport_ImportModule("mytest");
	if (!pModule)
	{
		cout << "Python get module failed." << endl;
		return 0;
	}
	PyObject* pFunc = NULL;
	pFunc = PyObject_GetAttrString(pModule, "Hello");
	//PyEval_CallObject(pFunc, NULL);//调用
	PyObject_CallObject(pFunc, NULL); //调用

	//获取add函数
	PyObject* pAdd = PyObject_GetAttrString(pModule, "add");
	if (!pAdd ||!PyCallable_Check(pAdd))
	{
		cout << "Python get add failed." << endl;
		return 0;
	}

	//初始化要传入的参数
	PyObject* args = PyTuple_New(2);
	//将Long类型转为Python可接受的类型
	PyObject* arg1 = PyLong_FromLong(4);
	PyObject* arg2 = PyLong_FromLong(3);

	//将arg1配置为arg带入第一参数
	PyTuple_SetItem(args, 0, arg1);
	PyTuple_SetItem(args, 1, arg2);

	PyObject* pRet = PyObject_CallObject(pAdd, args); //调用

	if (pRet)
	{
		long result = PyLong_AsLong(pRet);
		cout << "result:" << result << endl;
	}
	Py_Finalize();

	system("pause");
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   21天前   34   0   0 C++
  TEZNKK3IfmPf   21天前   23   0   0 指针C++
TEZNKK3IfmPf