c++ 混合Python编程

#include "testPython.h"
#include <QtWidgets/QApplication>
#include <Python.h>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Py_Initialize();
    if (!Py_IsInitialized())
    {
        qDebug() << "Initialize Python failed.";
    }
	//设置python文件路径
   PyRun_SimpleString("import sys");
   PyRun_SimpleString("sys.path.append(\"./\")");
   //加载aa.py文件
	PyObject* pModule = PyImport_ImportModule("testfile"); //注意python文件不要取名为test.py,会与python库文件冲突
	if (!pModule)
	{
		qDebug() << "load pModule(testfile.py) fail!";
		Py_Finalize();
		return a.exec();
	}

	//加载函数show
	PyObject* pFun_show = PyObject_GetAttrString(pModule, "show");
	if (!pFun_show)
	{
		qDebug() << "Get pFun_show(show) failed!";
		//return a.exec();
	}
	// 调用Python函数并获取返回值
	PyObject* pResult = PyObject_CallObject(pFun_show, NULL);
	if (!pResult) {
		qDebug() << "Failed to call generate_random_array function!";
		PyErr_Print();
		//return 1;
	}
	PyObject* pFun_sum = PyObject_GetAttrString(pModule, "sum");
	if (!pFun_sum)
	{
		qDebug() << "Get pFun_sum(sum) failed!";
		//return a.exec();
	}
	// 调用Python函数并获取返回值
	PyObject *a = PyLong_FromLong(10);
	PyObject* b = PyLong_FromLong(20);
	PyObject* PyObjectArgs = PyTuple_New(2);
	PyTuple_SetItem(PyObjectArgs, 0, PyLong_FromLong(10));
	PyTuple_SetItem(PyObjectArgs, 1, PyLong_FromLong(20));
	
	//First call method
	PyObject* pSumRetVal = PyObject_CallObject(pFun_sum, PyObjectArgs);
	if (!pResult) {
		qDebug() << "Failed to call generate_random_array function!";
		PyErr_Print();
		//return 1;
	}
	//Second call method
	pSumRetVal = PyObject_CallFunctionObjArgs(pFun_sum, a, b);
	// 解析返回值
	PyObject* pRetVal = PyObject_Str(pSumRetVal);
	const char* resultStr = PyUnicode_AsUTF8(pRetVal);
	//PyObject* pStr = PyObject_Str(pResult);
	//const char* resultStr = PyUnicode_AsUTF8(pStr);
	//qDebug() << "Generated array:" << resultStr;
	// 释放资源
	//Py_XDECREF(pStr);
	Py_XDECREF(pSumRetVal);
	Py_XDECREF(pResult);
	Py_XDECREF(pFun_sum);
	Py_XDECREF(pFun_show);
	Py_XDECREF(pModule);
    Py_Finalize();
    testPython w;
    w.show();
    return a.exec();
}

Python脚本内容

def show():
    print("hello!")
def sum(a,b):
    return (a+b)

def main():
    show()
    print(sum(1,2))
 
if __name__ == '__main__':
    main()
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值