Ubuntu下Python与C/C++混合编程
转载自:
博主:飞越彩虹;
来源:博客园;
C++调用Python
Python模块代码:
#!/usr/bin/python
#Filename:TestModule.py
def Hello(s):print "Hello World"print sdef Add(a, b):print 'a=', aprint 'b=', breturn a + bclass Test:def __init__(self):print "Init"def SayHello(self, name):print "Hello,", namereturn name
C++代码:
#include<iostream>
#include<Python.h>
using namespace std;
int main(int argc, char* argv[])
{//初始化pythonPy_Initialize();//直接运行python代码PyRun_SimpleString("print 'Python Start'");//引入当前路径,否则下面模块不能正常导入PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('./')"); //引入模块PyObject *pModule = PyImport_ImportModule("TestModule");//获取模块字典属性PyObject *pDict = PyModule_GetDict(pModule);//直接获取模块中的函数PyObject *pFunc = PyObject_GetAttrString(pModule, "Hello");//参数类型转换,传递一个字符串。将c/c++类型的字符串转换为python类型,元组中的python类型查看python文档PyObject *pArg = Py_BuildValue("(s)", "Hello Charity");//调用直接获得的函数,并传递参数PyEval_CallObject(pFunc, pArg);//从字典属性中获取函数pFunc = PyDict_GetItemString(pDict, "Add");//参数类型转换,传递两个整型参数pArg = Py_BuildValue("(i, i)", 1, 2);//调用函数,并得到python类型的返回值PyObject *result = PyEval_CallObject(pFunc, pArg);//c用来保存c/c++类型的返回值int c;//将python类型的返回值转换为c/c++类型PyArg_Parse(result, "i", &c);//输出返回值printf("a+b=%d\n", c);//通过字典属性获取模块中的类PyObject *pClass = PyDict_GetItemString(pDict, "Test");//实例化获取的类PyObject *pInstance = PyInstance_New(pClass, NULL, NULL);//调用类的方法result = PyObject_CallMethod(pInstance, "SayHello", "(s)", "Charity");//输出返回值char* name=NULL;PyArg_Parse(result, "s", &name);printf("%s\n", name);PyRun_SimpleString("print 'Python End'");//释放pythonPy_Finalize();getchar();return 0;
}
编译:
g++ -I/usr/include/python2.7 PythonWithCpp.cpp -lpython2.7
运行结果:
Python Start
Hello World
Hello Charity
a= 1
b= 2
a+b=3
Init
Hello, Charity
Charity
Python End
Python调用C++
C++代码:
//用C++必须在函数前加extern "C"extern "C" int Add(int a,int b)
{return a+b;
}
编译:
g++ -c -fPIC LibPythonTest.cpp
g++ -shared LibPythonTest.o -o LibPythonTest.so
Python代码:
#!/bin/python
#Filename:PythonCallCpp.py
from ctypes import *
import os
libPythonTest = cdll.LoadLibrary('./LibPythonTest.so')
print libPythonTest.Add(1,1)
运行:
python PythonCallCpp.py
运行结果:
2
注意: python2和python3的版本中print等函数语法可能不同:例如:print “hello”(python2)—>print(“hello”)(python3)
Ubuntu下Python与C/C++混合编程相关推荐
- python和C语言混合编程实例
转载自:http://www.jb51.net/article/50633.htm 这篇文章主要介绍了python和C语言混合编程实例,文中开发了一个tcp端口ping程序来介绍混合编程,需要的朋友可 ...
- Ubuntu下Python安装了依赖包后仍然找不到包 python setup.py install 解决方案
Ubuntu下Python安装了依赖包后仍然找不到包 python setup.py install 解决方案 参考文章: (1)Ubuntu下Python安装了依赖包后仍然找不到包 python s ...
- Ubuntu下Python使用指南
Ubuntu下python配置 Ubuntu简单解决多版本python切换以及多版本pip对应问题 python及库在linux下的目录 在ubuntu下pip需要自行安装 sudo apt-get ...
- ubuntu 下 python 安装 venv
ubuntu 下 python 安装 venv 1.首先,确保您的系统已安装 Python3 和 pip3,如果没有安装,可以使用以下命令安装: 2. 接着,安装 virtualenv 包,使用以下命 ...
- 记录 win10/Ubuntu18 双系统安装 附Ubuntu下Python,TensorFlow的使用问答
1.去Linux官网下载Ubuntu 18. 2.U盘刻录Ubuntu: 最新UltraISO官方免费下载 - UltraISO软碟通中文官方网站 https://cn.ultraiso.net/xi ...
- 《Python开发 - Python杂记》Python与C/C++混合编程
Python是脚本语言,可以做的事情非常的多,本文将要讲解使用Python来调用C/C+库. 关于C/C++库的创建请看笔者以前的文章,这里只给出Window下的创建过程. 静态库和动态库(Windo ...
- ARM下C语言和汇编语言混合编程
文章目录 一. 在C语言中调用汇编语言 1. 编写代码 2. 调试验证 二. 在汇编语言中调用C语言 1. 编写代码 2. 调试验证 关于函数的传递参数以及接受返回值的原理,在另一篇博客:X86与AR ...
- Ubuntu 下 Python 版本管理
一.ubuntu与python ubuntu系统自带python2.7.python3.5两个默认版本,ubuntu自身很多功能都依赖于python2.7.python3.5,所以不管你要用哪个版 ...
- ubuntu下python多版本切换问题
一般情况下,ubunu系统下会自带python,你如果安装了其它版本的python,就会出现多个版本的python,因此想要在ubuntu终端下切换不同的版本,就是设置你默认的python版本,这里演 ...
最新文章
- 5/29 c的结构体变量
- 李开复「预见2021」:自动化成企业升级转型刚需 | AI日报
- 马斯克要办大学上了热搜
- oracle质数怎么算,借花献佛之使用Oracle sql求质数(笔记)
- mysql集群会备份数据吗_mysql集群即双机备份与主从复制
- 鸿蒙51单片机,基于C51系列单片机的交通控制系统设计
- Eclipse 搭建Android开发环境(整理)
- python中__init__函数以及参数self
- 【2016年第4期】研究(国家自然科学基金项目成果集萃)导读
- golang 类型说明
- 在线CSV转YAML工具
- java毕业实习日志_《Java课程实习》日志(周一)
- Spring学习-黎活明视频学习注解
- 三星android截屏快捷键是什么,三星s10截屏快捷键是什么
- 排查线上CPU飙高的原因和解决
- html absolute溢出,position:absolute溢出处理
- Android6.0权限的处理
- python输出26个大小写字母_python实现生成字符串大小写字母和数字的各种组合
- java当中怎么测试异步接口【杭州多测师_王sir】【杭州多测师】
- Android熄屏与亮屏控制
热门文章
- 容器编排技术 -- Kubernetes入门概述
- Primefaces,Spring 4 with JPA(Hibernate 4 / EclipseLink)示例教程
- 数据可视化组件Grafana详细解读--Debian/Ubuntu上的安装
- 2021 npm安装Electron失败解决方法
- C# 使用TcpClient 测试网络连接是否正常
- Codeforces Round #617 (Div. 3) String Coloring(E1.E2)
- JavaScript性能优化【下】--性能优化的具体方式
- 通用职责分配软件原则之3-低耦合原则
- css索引_CSS中的Z索引:它是什么以及它做什么
- Java的synchronized的使用_Java中synchronized的用法