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

标签 c++ python api

测试.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/

相关文章:

php - 如何从 XML 文档获取值

C++访问数组元素

c++ - 无法在 C++ 中读取带有括号字符的二进制文件

c++ - 如何将二维数组值与用户输入进行比较?

c++ - 在 XCode 4.4.1 上构建 gtest 框架

python - 仅针对某些特定元素向数据框添加值 - python

python - 如何在 keras 中进行模型预测后恢复原始值?

Python 出现 SQLAlchemy 编码错误

用于更新或插入值的 PHP 代码

javascript - Facebook 身份验证对话框显示 "Okay, go to application"而不是 "Allow"