C++调用Python3, 并传参数

11 篇文章 0 订阅

#include "C:\\Program Files (x86)\\Python\\37\\include\\Python.h"

#pragma comment(lib, "python37.lib")


#include <iostream>
#include<string>

using namespace std;


int main()
{
	Py_Initialize();        // 初始化


	//导入sys,添加模块路径

	PyRun_SimpleString("import sys");
	PyRun_SimpleString("sys.path.append('K:\')");	// py文件放入指定的目录中无法载入
	PyRun_SimpleString("print(sys.path)");


	// 加载模块
	//PyObject* moduleName = PyString_FromString("demo"); //模块名,demo.py
	//PyObject* pModule = PyImport_Import(moduleName);    //python2.7加载模块

	PyObject* pModule = PyImport_ImportModule("xx");    //python3.5  载入 xx.py 文件

	//python3.5没有PyString_FromString(有PyUnicode_FromString)
	if (!pModule)		// 加载模块失败
	{
		cout << "[ERROR] Python get module failed." << endl;
		int a; cin >> a;
		return 0;
	}

	// 加载函数
	PyObject* pv = PyObject_GetAttrString(pModule, "xxadd");
	if (!pv || !PyCallable_Check(pv))  // 验证是否加载成功
	{
		cout << "[ERROR] Can't find funftion (xxadd)" << endl;
		int a; cin >> a;
		return 0;
	}
	cout << "[INFO] Get function (xxadd) succeed." << endl;

	// 设置参数
	PyObject* args = PyTuple_New(2);       // 2个参数
	//PyObject* arg1 = PyUnicode_FromString("hello");    // 参数一设为,字符串
	PyObject* arg1 = PyLong_FromLong(50);    // 参数二设为,一个整数,用long表示
	PyObject* arg2 = PyLong_FromLong(520);    // 参数二设为,一个整数,用long表示
	PyTuple_SetItem(args, 0, arg1);
	PyTuple_SetItem(args, 1, arg2);

	// 调用函数`
	PyObject* pRet = PyObject_CallObject(pv, args);

	// 获取参数
	if (pRet)  // 验证是否调用成功
	{
		long result = PyLong_AsLong(pRet);
		//string result = PyUnicode_AsUTF8(pRet);     //返回字符串
		cout << "result:" << result << endl;
	}
	Py_Finalize();      // 释放资源
	system("pause");
	return 0;
}




xx.py

def xxadd(a, b):
    print('add ', a, ' and ', b)
    return(a+b)

py文件放入C:\Program Files (x86)\Python\37\Lib 才调用成功…

后续待研究

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值