gpt4 book ai didi

python - 将 Python 嵌入到 C 中——导入模块

转载 作者:太空狗 更新时间:2023-10-29 21:19:00 25 4
gpt4 key购买 nike

根据 Documentation,我在为 C 使用嵌入式 Python 时遇到问题- 每当我尝试使用导入的模块时,我都会得到:

Unhandled exception at 0x1e089e85 in PythonIncl.exe: 0xC0000005: Access violation reading location 0x00000004.

错误发生在 PyObject_GetAttrString() 方法中,文档没有太大帮助。我也尝试过使用教程,如 Example来自 IBM,但总是遇到相同的访问冲突。

以下是我似乎无法开始工作的教程之一的示例代码,这里有什么问题吗?

C 代码(在一个主文件中):

#include <Python.h>
int main()
{
PyObject *strret, *mymod, *strfunc, *strargs;
char *cstrret;
Py_Initialize();
mymod = PyImport_ImportModule("reverse");
strfunc = PyObject_GetAttrString(mymod, "rstring");
strargs = Py_BuildValue("(s)", "Hello World");
strret = PyEval_CallObject(strfunc, strargs);
PyArg_Parse(strret, "s", &cstrret);
printf("Reversed string: %s\n", cstrret);
Py_Finalize();
return 0;
}

Python 代码(位于同一文件夹中名为 reverse.py 的文件中):

def rstring(s):
i = len(s)-1
t = ''
while(i > -1):
t += s[i]
i -= 1
return t

我正在使用 MSVS2008、Python 2.7 运行 XP 机器

一些上下文:我正在尝试在一个相当大的 C 程序中嵌入一个使用 OpenOPC 的小 python 脚本,并希望在两者之间传输数据。但是,我已经在使用基本示例的概念验证测试中失败了。

最佳答案

检查 PyImport_ImportModule 调用的结果:它失败并返回 NULL。那是因为默认情况下,当前目录不在搜索路径中。添加

PySys_SetPath("."); // before ..
mymod = PyImport_ImportModule("reverse");

将当前目录添加到模块搜索路径并使您的示例正常工作。

关于python - 将 Python 嵌入到 C 中——导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7283964/

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