嵌入python
Posted
技术标签:
【中文标题】嵌入python【英文标题】:embedding python 【发布时间】:2012-01-04 00:02:33 【问题描述】:我试图从 C 代码中调用 python 函数,我遵循了来自 here 的示例
我也有正确的包含文件目录、库目录,并链接了 python32.lib(我使用 python 32)但是错误是 python/C API,如 PyString_FromString、PyInt_FromLong、PyInt_AsLong 未定义(调试器中的错误)
这很奇怪,因为我也在使用其他 API,但它们都很好......
这里有什么问题??
int
main(int argc, char *argv[])
PyObject *pName, *pModule, *pDict, *pFunc;
PyObject *pArgs, *pValue;
int i;
if (argc < 3)
fprintf(stderr,"Usage: call pythonfile funcname [args]\n");
return 1;
Py_Initialize();
pName = PyString_FromString(argv[1]);
/* Error checking of pName left out */
pModule = PyImport_Import(pName);
Py_DECREF(pName);
if (pModule != NULL)
pDict = PyModule_GetDict(pModule);
/* pDict is a borrowed reference */
Py_Initialize()、PyImport_Import()、PyModule_GetDict() 都可以正常工作,但 PyString_FromString 不行...
【问题讨论】:
我真的认为函数 PyString_FromString 被重命名为 PyBytes_FromString 进入 Python 3.x。 【参考方案1】:您使用的示例代码适用于古老的 Python 版本 2.3.2。 Python 3.x 行不仅在语言中而且在 C API 中引入了许多不兼容的地方。
您提到的函数在 Python 3.2 中不再存在。
PyString_
函数已重命名为 PyBytes_
。
PyInt_
函数消失了,应该改用PyLong_
。
这是您使用的相同示例,但用于 Python 3:
5.3. Pure Embedding
请注意,它使用的是PyUnicode_
,而不是PyString_/PyBytes_
。在 Python 2.x 使用字节字符串的许多地方,Python 3.x 使用 unicode 字符串。
顺便说一句,我通常使用这个页面来查找所有可能的调用:
Index – P
【讨论】:
所以我听从了你的建议,它奏效了。现在我想使用您提供的文档示例对其进行测试。我是否进入 .exe 目录和 cmd 'call multiply multiply 3 2' ?? 我想是的,是的,假设 exe 文件名为call
。如果您遇到困难,请提出一个单独的问题。以上是关于嵌入python的主要内容,如果未能解决你的问题,请参考以下文章