我试图调用一个简单的python函数,该函数在(“ ctest.py”)中定义为

def square(a)
    return a**2

以下(“ pytest.c”)(在同一目录中)是我试图用来调用该函数的C代码。 我遇到的问题是,当C程序尝试加载python模块时,将返回NULL。

#include <Python.h>

int main(int argc, char* argv[])
{
  printf("Calling Python Function\n");
  Py_Initialize();  // Initialize the Python interpreter.

  PyObject *pName, *pModule, *pDict, *pFunc, *pArgs, *pValue;  // Create some Python       objects that will later be assigned values.
  // Convert the file name to a Python string.
  pName = PyString_FromString("ctest.py");
  if (pName==NULL)
     printf("file not found");
  else
    printf("%s\n", PyString_AsString(pName));
  // Import the file as a Python module.
  pModule = PyImport_Import(pName);         //PROBLEM LINE
  if(pModule==NULL) 
     printf("no Module\n");
  // Create a dictionary for the contents of the module.
  pDict = PyModule_GetDict(pModule);
  printf("After Dictionary retrieval\n");
  // Get the add method from the dictionary.
  pFunc = PyDict_GetItemString(pDict, "square");
  printf("after function retrieval\n");

  // Convert 2 to a Python integer.
  pValue = PyInt_FromLong(2);
  // Call the function with the arguments.
  PyObject* pResult = PyObject_CallObject(pFunc, pValue);
  // Print a message if calling the method failed.
  if(pResult == NULL)
    printf("Calling the add method failed.\n");
  // Convert the result to a long from a Python object.
  long result = PyInt_AsLong(pResult);
  // Destroy the Python interpreter.
  Py_Finalize();
  // Print the result.
  printf("The result is %d.\n", result);
  return 0; 
}

C代码使用以下内容构建:

 gcc -o pytest -lpythhon2.7 -I/usr/include/python2.7 pytest.c

===============>>#1 票数:0

您似乎遇到了命名/路径问题。

您可能会看到以下答案: 为什么PyImport_Import无法从当前目录加载模块?

  ask by user3552845 translate from so

未解决问题?本站智能推荐:

1回复

使用Python.h从C ++调用Django

我需要从C ++调用Django函数并在我的C ++代码中获取它们的输出。 如您所知,Django的使用方法是调用Manage.py Python脚本,将所需函数作为第一个参数和参数。 现在我有一个名为“test”的测试函数,它返回一个JSON格式的字符串。 因此,如果我打电话:
2回复

如何有效地将C / C ++逻辑转换为python?

我有一个.cpp代码,如下所示,其中我将一些matrix_1的值复制到matrix_2。 (注意:最初matrix_2是matrix_1的副本。) 现在,我在python-2.7中实现了相同的代码,如下所示, python中的矩阵就像 在python中,转换速度比在
2回复

Python C API - 创建关键字

我在尝试从我的C ++代码调用Python函数时遇到了麻烦。 我正在尝试使用以下参数调用Django函数call_command: 看到这里的原因。 这将运行不带stdout = content参数的命令: 在我的生活中,我不能弄清楚如何创建这个关键字。 给我一个
1回复

使用一个C程序运行python脚本(不同的python版本)

我想用一个小型C / ++程序在线程中运行一些python脚本,但是我需要不同的python版本来运行这些脚本,因为MySQLdb软件包在python3中不起作用,而某些软件包在python2中不可用。 或通过 您有什么想法或其他方法可以解决我的问题吗?
1回复

在Python中加载C共享库期间发生OSError(未定义符号:checkedCalloc)

我想寻求有关以下问题的帮助。 一些理论:我正在使用Ubuntu 12.04,python2.7,并且试图在python中加载C共享库(libFSToolbox.so)。 我想使用PyFeat作为python包装器进行FEAST。 我已经编译了FEAST和FEAST必备MIToolbox
1回复

使用PyObject_CallMethod调用带有可选参数的函数

使用Python C API,如何使用可选参数调用函数? 例如,假设有一个带有函数add的Python模块add_module.py ,如下所示: add(1, 2)将对应于 如何使用Python API调用add(b=5)类的东西? 谢谢!
1回复

包括 到makefile.am

对于这个新手问题,我深表歉意。 我目前正在寻找将小的python代码嵌入到主要的C代码中。 建议在标头使用#include <Python.h> 。 我已经这样做了,并且我的Ubuntu12-0.4机器还安装了python-dev 。 通过运行locate Python.
1回复

从Python调用C ++函数

您好,我在C ++中有这样的代码,我需要从Python调用OnComplete方法。 请注意,我必须在python中创建MyListener,在python中实现OnNavigationEvent并调用C ++的OnComplete。 可能吗? 更新:我无法触摸“ OnCom
1回复

在Python中调用C函数并返回2个值

我试图弄清楚如何从我在python中调用的C函数返回2个值。 我已经在线阅读了该材料,并正在使用struct输出两个变量。 当我在同一C文件中调用此函数时,我能够输出变量。 但是,当我尝试在python中调用它时,它仍然仅返回一个值。 这是我的C代码: 这是我的Python代
2回复

使用Python C API两次调用C函数时出现分段错误

最近我想使用C包装器从Fortran调用Python(见这里 )。 下面我发布一个更简单的例子。 函数的第二次调用导致pModule = PyImport_Import(pName)处的分段错误。 我发现问题是from scipy.optimize import newton线 - 如果我