免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2186 | 回复: 0
打印 上一主题 下一主题

python嵌入要点(c/c++版) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-04 10:44 |只看该作者 |倒序浏览
python嵌入即在非python语言中使用python语言,这与python扩展正好相反。

扩展与嵌入的对象均是python语言:
嵌入即嵌入python,在其他语言中嵌入python,在其他语言中调用python;
扩展即扩展python,使用其他语言扩展python,在python中使用其他语言。

python嵌入一般流程如下:
先把一些数据从c的表示形式转化成python的表示形式。
然后调用python的API。
最后,把python的调用结果转化成c的表示形式。

转换c数据到python数据:
PyAPI_FUNC(PyObject *) Py_BuildValue(const char *, ...)

PyObject* PyFloat_FromDouble(double v)
PyObject* PyInt_FromLong(long ival)
PyAPI_FUNC(PyObject *) PyString_FromString(const char *)

转换python数据到c数据:
PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...)
PyAPI_FUNC(int) PyArg_ParseTupleAndKeywords(PyObject *, PyObject *, const char *,  char **, ...)
PyArg_Parse(不推荐使用)

PyAPI_FUNC(double) PyFloat_AsDouble(PyObject *pyfloat)
PyAPI_FUNC(long) PyInt_AsLong(PyObject *)
PyAPI_FUNC(char *) PyString_AsString(PyObject *)

调用python:
首先必不可少的要import:
PyAPI_FUNC(PyObject *) PyImport_ImportModule(const char *name)

调用函数:
PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *o, char *method, char *format, ...):
o.method(arg)

PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable_object, char *format, ...):
callable_object(arg)

PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable_object, PyObject *args)

PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable_object, PyObject *args, PyObject *kw):
args不能为NULL(PyObject_CallObject不受此限),此时()即空tuple可以接受。

其他函数:
Py_Initialize()、Py_Finalize
int PyRun_SimpleString(const char *cmd)
PyObject *PyModule_GetDict(PyObject *module) [相当于模块的__dict__属性]
PyObject *PyObject_GetAttrString(PyObject *obj, char *attr) [获取对象obj的attr属性或者函数]

引用计数:
部分返回borrowed reference的函数:
PyImport_GetModuleDict、PyModule_GetDict、
PyList_GetItem、PyList_GET_ITEM、PyTuple_GetItem、PyTuple_GET_ITEM
PyDict_GetItem、PyDict_GetItemString

部分steal reference的函数:
PyTuple_SetItem、PyTuple_SET_ITEM、PyList_SetItem、PyList_SET_ITEM



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/62895/showart_1104031.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP