午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

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

 Tech-d 2013-08-12

1. win下,首先,要在C++的工程文件總增加python安裝目錄下的include(附加包含目錄,如C:\Python26\include)和libs目錄(附加庫目錄,如C:\Python26\libs,和附加依賴項(xiàng),如Python26.lib)。

注意工程文件可能需要使用Release模式,因?yàn)橛肈ebug模式時(shí),會(huì)需要Python26_d.lib,而你的安裝目錄下是不一定有這個(gè)文件的。

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

3. 引用python的代碼部分,都需要以Py_Initialize()開始,用Py_Finalize()結(jié)束

4. python相關(guān)的對(duì)象多半聲明為PyObject指針,如PyObject *pstr, *pmod, *pdict, *pfunc, *pargs等

5. 最簡單的調(diào)用一段python代碼的方法:

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

6. 導(dǎo)入一個(gè)模塊:

pmod = PyImport_ImportModule("script") //script, 導(dǎo)入模塊的名字

調(diào)用其中的一個(gè)函數(shù)pyPrint(name1, name2)

pfunc = PyObject_GetAttrString(pmod, "pyPrint");

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

用指定的參數(shù)運(yùn)行這個(gè)函數(shù):

PyEval_CallObject(pfunc, pargs);

7. 步驟6的另一種做法:
導(dǎo)入一個(gè)模塊:
pname = PyString_FromString("script");
pmod = PyImport_Import(pname);
調(diào)用其中的函數(shù)pyPrint(name1, name2)
pdict = PyModule_GetDict(pmod);
pfunc = PyDict_GetItemString(pdict, "pyPrint");
pargs = Py_BuildValue("s, s", "Hello World", "again");
運(yùn)行這個(gè)函數(shù):
PyEval_CallObject(pfunc, pargs);

注意,當(dāng)py函數(shù)沒有參數(shù)時(shí),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))

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多