我使用的是Arch Linux,Python 2.7.2和gcc.
这里的代码:
#include <stdio.h>#include <stdlib.h>#include <python2.7/Python.h>int main(int argc,char **argv){ PyObject *pname,*pModule,*pFunc,*pArg,*pDict,*pReturn,*pT1,*pT2,*pX,*pY; int i; double x,y; Py_Initialize(); PySys_SetPath("."); pname = PyString_FromString("func"); if (!pname) { printf("pname\n"); return 0; } pModule = Pyimport_import(pname); pDict = PyModule_GetDict(pModule); pFunc = PyDict_GetItemString(pDict,"get_vals"); pArg = PyTuple_New(2); PyTuple_SetItem(pArg,Pyfloat_FromDouble(4.0)); PyTuple_SetItem(pArg,1,Pyfloat_FromDouble(2.0)); pReturn = PyObject_CallObject(pFunc,pArg); pT1 = PyTuple_GetItem(pReturn,0); pT2 = PyTuple_GetItem(pReturn,1); for (i = 0; i < PyTuple_Size(pT1); i++) { pX = PyTuple_GetItem(pT1,i); pY = PyTuple_GetItem(pT2,i); x = Pyfloat_AsDouble(pX); y = Pyfloat_AsDouble(pY); Py_XDECREF(pX); Py_XDECREF(pY); pX = NulL; pY = NulL; printf("Point p position is: %.2fx,%.2fy",x,y); } Py_XDECREF(pname); Py_XDECREF(pModule); Py_XDECREF(pFunc); Py_XDECREF(pArg); Py_XDECREF(pDict); Py_XDECREF(pReturn); Py_XDECREF(pT1); Py_XDECREF(pT2); Py_Finalize(); return 0;}
func.py
from math import cosdef get_vals(wIDth,height): x = (1,2) y = (cos(3),4) return x,y
如何在不需要使用脚本的情况下将Python脚本嵌入到C中?
解决方法 PySys_SetPath(“.”)清除了python路径,因此无法再找到任何库.你真正需要做的是导入sys.path然后将你的字符串附加到它:PyObject *sys = Pyimport_importModule("sys");PyObject *path = PyObject_GetAttrString(sys,"path");PyList_Append(path,PyString_FromString("."));
(我没有测试上面的代码,但应该关闭.另外,你应该做错误检查)
总结以上是内存溢出为你收集整理的Python C API不加载模块全部内容,希望文章能够帮你解决Python C API不加载模块所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)