C++中嵌入python最基本用法

46 篇文章 1 订阅
24 篇文章 1 订阅

1. win下,首先,要在C++的工程文件总增加python安装目录下的include(附加包含目录,如C:\Python26\include)和libs目录(附加库目录,如C:\Python26\libs,和附加依赖项,如Python26.lib)。

注意工程文件可能需要使用Release模式,因为用Debug模式时,会需要Python26_d.lib,而你的安装目录下是不一定有这个文件的。

2. 在需要用到python的C++文件中,添加#include "Python.h"

3. 引用python的代码部分,都需要以Py_Initialize()开始,用Py_Finalize()结束

4. python相关的对象多半声明为PyObject指针,如PyObject *pstr, *pmod, *pdict, *pfunc, *pargs等

5. 最简单的调用一段python代码的方法:

PyRun_SimpleString("from time import time, ctime\nprint 'today is ', ctime(time())\n");

6. 导入一个模块:

pmod = PyImport_ImportModule("script") //script, 导入模块的名字

调用其中的一个函数pyPrint(name1, name2)

pfunc = PyObject_GetAttrString(pmod, "pyPrint");

pargs = Py_BuildValue("s, s", "This is ", "a python code");

用指定的参数运行这个函数:

PyEval_CallObject(pfunc, pargs);

7. 步骤6的另一种做法:
导入一个模块:
pname = PyString_FromString("script");
pmod = PyImport_Import(pname);
调用其中的函数pyPrint(name1, name2)
pdict = PyModule_GetDict(pmod);
pfunc = PyDict_GetItemString(pdict, "pyPrint");
pargs = Py_BuildValue("s, s", "Hello World", "again");
运行这个函数:
PyEval_CallObject(pfunc, pargs);

注意,当py函数没有参数时,pargs = NULL

8. 释放PyObject 指针: Py_DECREF(pobj)



附:Py_BuildValue的使用例子,来自python documentation:

    Py_BuildValue("")                        None
    Py_BuildValue("i", 123)                  123
    Py_BuildValue("iii", 123, 456, 789)      (123, 456, 789)
    Py_BuildValue("s", "hello")              'hello'
    Py_BuildValue("ss", "hello", "world")    ('hello', 'world')
    Py_BuildValue("s#", "hello", 4)          'hell'
    Py_BuildValue("()")                      ()
    Py_BuildValue("(i)", 123)                (123,)
    Py_BuildValue("(ii)", 123, 456)          (123, 456)
    Py_BuildValue("(i,i)", 123, 456)         (123, 456)
    Py_BuildValue("[i,i]", 123, 456)         [123, 456]
    Py_BuildValue("{s:i,s:i}", "abc", 123, "def", 456)    {'abc': 123, 'def': 456}
    Py_BuildValue("((ii)(ii)) (ii)",  1, 2, 3, 4, 5, 6)          (((1, 2), (3, 4)), (5, 6))

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值