gpt4 book ai didi

c++ - 从 C++ 调用 Python 的问题

转载 作者:行者123 更新时间:2023-11-30 03:10:31 24 4
gpt4 key购买 nike

测试.py

def add(a,b):
""" """
print a,b,a+b
return a+b

程序

#include <python.h>
int _tmain(int argc, _TCHAR* argv[])
{
try
{
PyObject *pName,*pModule,*pDict,*pFunc,*pArgs1,*pArgs2,*pOutput;

Py_Initialize();
if(!Py_IsInitialized())
return -1;
pModule=PyImport_ImportModule("test");

pDict=PyModule_GetDict(pModule);

pFunc=PyDict_GetItemString(pDict,"add");
pArgs1=Py_BuildValue("ii", 1,2);
//pArgs2=Py_BuildValue("i", 2);

pOutput=PyEval_CallObject(pFunc,pArgs1);

int c=0;
PyArg_Parse(pOutput, "d", &c);
cout<<c;

//PyRun_SimpleString("");

Py_Finalize();
}
catch(exception* ex)
{
cout<<ex->what();
}
char c;
cin>>c;
return 0;
}

控制台什么都不打印并关闭。

怎么了?

谢谢!

最佳答案

我最后检查过,C 没有异常。当然,调用 Python 库不会抛出任何异常。

首先,由于您使用的是 C++,因此您可能需要包含带有 extern 声明的 Python 库。

extern "C" {
#include "python.h"
}

接下来,由于您在 C 调用中没有异常,因此您应该在进行过程中测试每个调用的结果。这将帮助您更好地了解失败的地方。

因为你没有得到段错误或任何东西,我怀疑你会得到

if(!Py_IsInitialized())
return -1;

然后退出。相反,您可以打印返回值,以便了解发生了什么。

int is_init = Py_IsInitialized();
cout << "are we initialized? " << is_init;
if(!is_init)
return -1;

如果这不能说明问题所在,则在整个代码中添加额外的 cout 语句以跟踪问题发生的位置……或者更好的是,使用调试器并在代码运行时单步执行代码。您肯定会发现问题所在。

关于c++ - 从 C++ 调用 Python 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3101225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com