You need to enable JavaScript to run this app. C++嵌入Python实现int变量互传的最简代码求助及实现
优惠活动
大模型
产品
解决方案
定价
更多

C++嵌入Python实现int变量互传的最简代码求助及实现

C++嵌入Python实现参数传递与结果获取案例

我刚入门,所以请不要给我贴200行仅用来转换int的代码。我需要尽可能精简、尽量少用晦涩命令的实现。
我花了好几个小时想找最入门级的示例却一无所获,试过PyArg_ParseTuple、PyArg_Parse、Py_BuildValue等无数方法,可能是语法用错了,但所有文档都没有对应示例。为了这么个本该非常 trivial 的功能耗了几小时,我十分沮丧。
我只想在C代码中嵌入一个小型Python函数,最简需求是:把C int变量a1传给Python函数,和b1相加后获取返回值,在C中用cout打印。

已有代码框架

PyObject *pmod1;
int a1 = 20; 
int cresult = 0;
int b1 = 0;

Py_Initialize();
pmod1 = PyImport_ImportModule("usermod");

(GAP HERE)

std::cout << cresult << " " << a1 << " " << b1;

Py_Finalize();

Python模块(usermod.py)内容

pythb1 = 5;

def ThisFunc(a,b):
  result = a+b
  return result

具体需求

我要实现的逻辑是:将C int变量a1传给ThisFunc的参数a,pythb1传给参数b,返回的result赋值给cresult用cout打印,同时读取Python中的pythb1赋值给C++的b1变量,最终cout输出应为:25 20 5。
我试过的方法里包括long a1(PyLong_AsLong(pmod3));,其中pmod3是Python对象,会导致程序无报错直接崩溃。

最终可运行实现

多次更新:我自己摸索出了实现方法,改编了书中找到的示例,除此之外网上找不到任何有用参考。经过无数次尝试修改终于完成,代码可编译运行,我不知道是不是标准实现,但达到了预期效果。这个场景的坑点是变量名写错编译器不会报错,和C++代码逻辑不同。

最终可运行代码如下:

PyObject *pmod, *pdict, *pvar, *presult, *pa1;
long a1 = 20, b1, cresult; 

Py_Initialize();

pmod = PyImport_ImportModule("usermod");
pdict = PyModule_GetDict(pmod);
pvar = PyRun_String("pythb1", Py_eval_input, pdict, pdict); // 读取Python脚本中定义的pythb1并存入pvar对象

if(PyLong_Check(pvar)){
  b1 = (PyLong_AsLong(pvar)); // 将Python对象pythb1/pvar转换为C long类型赋值给b1,Python中似乎只有long整型
}

pa1 = (PyLong_FromLong(a1)); // 将C long类型的a1转换为Python对象

PyObject_SetAttrString(pmod, "X1", pa1);
PyObject_SetAttrString(pmod, "X2", pvar);
presult = PyRun_String("ThisFunc(X1,X2)", Py_eval_input, pdict, pdict);

if(PyLong_Check(presult)){
  cresult = (PyLong_AsLong(presult)); 
}

std::cout << cresult << " " << a1 << " " << b1 << std::endl;

Py_DECREF(pmod); // 资源清理
Py_DECREF(pvar);
Py_DECREF(presult);
Py_DECREF(pa1);

Py_Finalize();

输出为25 20 5,完全符合预期。显然这个需求可以实现,但不知为何网上找不到相关示例,我只希望这部分能有更多更完善的文档。


内容的提问来源于stack exchange,提问作者Abalieno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 09:18:01