繁体   English   中英

PyObject_GetAttrString C++ 函数返回 NULL:无法从 C++ 调用 Python 函数

[英]PyObject_GetAttrString C++ function returning NULL: Unable to call Python functions from C++

我刚刚开始使用 C++ 使用 Python,我对为什么无法从 C++ 调用 Python 中的函数感到有些困惑。

这是我当前的 C++ 测试代码:

      #include <iostream>
      #include <Python.h>
      using namespace std;

      int main()
      {
             Py_Initialize();
             PyObject* myModuleString = PyString_FromString("test");
             PyObject* myModule       = PyImport_Import(myModuleString);

             if( myModule )
             {
                      PyObject* myFunction     = PyObject_GetAttrString(myModule, "Hello");
                      if( myFunction )
                      {
                             PyEval_CallObject( myFunction, NULL );
                      }
                      else
                      {
                             fprintf( stderr, "myFunction is NULL" );
                      }
             }
             else
             {
                      fprintf( stderr, "myModule is NULL" );
             }

             Py_Finalize();
             cin.get();
             return 0;
      }

这是我的 test.py Python 代码:

      import sys

      def Hello():
            print "Hello, world!"

在我进行更复杂的测试之前,我遇到了 PyObject_GetAttrString 传回 NULL 的问题,所以我想做一个更简单的测试,但在调用 PyObject_GetAttrString 后仍然收到 NULL。 根据我的理解, PyObject_GetAttrString 将 PyObject* 带入函数,然后我调用它,因此在那里接收 NULL 基本上意味着我无法调用该函数。

也是的,我查看了https://docs.python.org/2.7/甚至测试了https://docs.python.org/release/2.6.5/extending/embedding.html# 的步骤 5.3 中给出的示例纯嵌入(我使用 2.7.7,因为我计划与 3ds Max 集成)。 它仍然遇到与 PyObject_GetAttrString 相同的问题。

我假设这是我在 C++ 或 Python 代码中遗漏的一个简单错误或步骤。

将 Python 脚本名称从test.py更改为对我test.py的任何其他名称。

我遇到了类似的问题。 我发现我传递给 python 的字符串中的空格很远。 据我所知,您的打印语句有 6 个空格代替 4 个空格。备份它,看看是否一切都没有清除。

我有同样的问题。 虽然test.pymycode.c在同一个文件夹中(/home/user/python/example),但我不得不在Py_Initialize();之后添加对路径的引用Py_Initialize(); 如下行所示

PyRun_SimpleString ("import sys; sys.path.insert(0, '/home/user/python/spp')");*

将 /home... 替换为您的路径。

我以前的代码没有那行代码,但PyImport_Import正在工作,而PyObject_GetAttrString没有。 对我来说毫无意义,“别问我,我不知道 - Ozzy”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM