ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python 和 C语言的相互调用

2022-01-19 10:33:33  阅读:153  来源: 互联网

标签:调用 Python void C语言 int so print main display


 

第一种、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> int foo(int a, int b) {  printf("you input %d and %d\n", a, b);  return a+b; }

pycall.py

1 2 3 4 5 import ctypes 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> using namespace std;    class TestLib {   public:     void display();     void display(int a); }; void TestLib::display() {   cout<<"First display"<<endl; }    void TestLib::display(int a) {   cout<<"Second display:"<<a<<endl; } extern "C" {   TestLib obj;   void display() {     obj.display();     }   void display_int() {     obj.display(2);     } }

pycallclass.py

1 2 3 4 5 6 7 import ctypes 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> using namespace std; int test() {   int a = 10, b = 5;   return a+b; } int main() {   cout<<"---begin---"<<endl;   int num = 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 import commands import os main = "./testmain" if os.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()  print data    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,void,C语言,int,so,print,main,display
来源: https://www.cnblogs.com/emanlee/p/15821217.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有