Python 和 C语言的相互调用

python

 

第一种、Python调用C动态链接库(利用ctypes)

下面示例在linux或unix下可行。

pycall.c

1

2

3

4

5

6

7

8

/***gcc -o libpycall.so -shared -fPIC pycall.c*/

#include <stdio.h>

#include <stdlib.h>

intfoo(inta, intb)

{

 printf("you input %d and %d\n", a, b);

 returna+b;

}

pycall.py

1

2

3

4

5

importctypes

ll =ctypes.cdll.LoadLibrary 

lib =ll("./libpycall.so"

lib.foo(1, 3)

print\'***finish***\'

运行方法:

gcc -o libpycall.so -shared -fPIC pycall.c

python pycall.py

 

第2种、Python调用C++(类)动态链接库(利用ctypes)

pycallclass.cpp

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#include <iostream>

usingnamespacestd;

  

classTestLib

{

  public:

    voiddisplay();

    voiddisplay(inta);

};

voidTestLib::display() {

  cout<<"First display"<<endl;

}

  

voidTestLib::display(inta) {

  cout<<"Second display:"<<a<<endl;

}

extern"C"{

  TestLib obj;

  voiddisplay() {

    obj.display(); 

   }

  voiddisplay_int() {

    obj.display(2); 

   }

}

pycallclass.py

1

2

3

4

5

6

7

importctypes

so =ctypes.cdll.LoadLibrary 

lib =so("./libpycallclass.so"

print\'display()\'

lib.display()

print\'display(100)\'

lib.display_int(100)

运行方法:

g++ -o libpycallclass.so -shared -fPIC pycallclass.cpp

python pycallclass.py

 

第3种、Python调用C和C++可执行程序

main.cpp

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#include <iostream>

usingnamespacestd;

inttest()

{

  inta = 10, b = 5;

  returna+b;

}

intmain()

{

  cout<<"---begin---"<<endl;

  intnum = test();

  cout<<"num="<<num<<endl;

  cout<<"---end---"<<endl;

}

main.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

importcommands

importos

main ="./testmain"

ifos.path.exists(main):

  rc, out =commands.getstatusoutput(main)

  print\'rc = %d, \nout = %s\'%(rc, out)

  

print\'*\'*10

f =os.popen(main) 

data =f.readlines() 

f.close() 

printdata

  

print\'*\'*10

os.system(main)

 

运行方法(只有这种不是生成.so然后让python文件来调用):

g++ -o testmain main.cpp

python main.py

 

疑问:

Windows 如何实现?

 

 

 

REF

https://www.jb51.net/article/165362.htm

https://www.cnblogs.com/si-lei/p/10748612.html

https://www.cnblogs.com/fyly/p/11266308.html

 

以上是 Python 和 C语言的相互调用 的全部内容, 来源链接: utcz.com/z/386492.html

回到顶部