Linux使用Python呼叫C C 介面

2021-06-21 23:39:22 字數 3181 閱讀 5493

c++標頭檔案 pyext.h:

01#ifndef pyext_h

02#define pyext_h

03#include

04

05classpyext

06

09~pyext() {}

10

11staticvoidfoo();

12};

13

14#endif // pyext_h

main.cpp:

01#include "pyext.h"

02#include

03usingnamespacestd;

04

05voidpyext::foo()

09

10staticpyobject *func(void)

15

16staticpymethoddef my_methods = ,

18

19};

20

21pymodinit_func initpyext(void)

c模組中的函式簽名一般有下列三種形式:

pyobject

*myfunction(pyobject

*self, pyobject

*args);

pyobject

*myfunctionwithkeywords(pyobject

*self, pyobject

*args, pyobject

*kw);

pyobject

*myfunctionwithnoargs(pyobject

*self);

繼續上面例子, 最方便最快捷擴充套件介面, 首先寫乙個setup.py指令碼:

1fromdistutils.coreimportsetup, extension

2setup(name='pyext', version='1.0',  \

3ext_modules=[extension('pyext', sources=['main.cpp'])])

然後執行下述命令進行build:

1python ./setup.py build

這會在當前目錄下生成乙個build子目錄,其中包含了中間生成的pyext.o以及最後生成出來的pyext.so.

進行安裝命令:

1python ./setup.py install

或者手動複製到以下目錄:

1sudocppyext.so 到 /usr/local/lib/python2.7/dist-packages

可以開始測試模組了:

shell中命令執行python, import模組名, dir檢視被匯出函式名:

>>import pyext

>>dir(pyext)

>>['__doc__','__file__','__name__','__package__','func']

得知呼叫函式為func(), 測試函式:

view source

print?

1importpyext

2

3defmain():

4printpyext.func()

5

6if__name__=='__main__':

7main()

python呼叫呼叫Linux命令

下面 演示了呼叫乙個shell命令,其中,命令的輸出會儲存到result變數中,而命令的返回值,則儲存到exitcode中,由此可見,呼叫shell命令還是很方便的 import commands exitcode,result commands.getstatusoutput dir print ...

linux 下呼叫python檔案

在linux下直接呼叫python 檔案的方法 在裝有python環境的系統下執行 python 檔名.py 利用shell檔案呼叫python的方法 step01 建立python指令碼,例如 pythontest.r step02 建立shell指令碼,例如 runpythontest.sh,內...

Linux系統呼叫 使用syscall

博主的另一篇博文介紹了如何使用int 0x80指令進行linux系統呼叫,這一篇博文介紹一下如何使用另一種方式 syscall指令進行linux系統呼叫,然後會簡要說明二者的不同。通過syscall指令進行linux系統呼叫與通過int 0x80指令進行linux系統呼叫在使用上差別不大,系統呼叫號...