python与c语言交互应用实例
1、python向c语言写数据
1) 先将接收端编译成一个共享链接库
gcc/arm-linux-gnueabihf-gcc -o bluetooth_proxy.so -shared -fPIC bluetooth_proxy.c
bluetooth_proxy.c
#include <stdio.h> struct bluetooth_t{
int status;
char buf[];
}; int bluetooth_proxy_cb(struct bluetooth_t bluetooth)
{
printf("bluetooth status:%d, buf:%s \n", bluetooth.status, bluetooth.buf); return ;
}
2)运行发送端python脚本即可将python数据发送到c语言接口函数。
bt_msg_send_simple.py
#!/usr/bin/python
import ctypes
from ctypes import * class bluetooth(Structure):
_fields_=[('status',c_int),('buf',c_char * 128)] if __name__ == "__main__": func = ctypes.cdll.LoadLibrary("./bluetooth_proxy.so")
func.bluetooth_proxy_init()
s = bluetooth()
s.status = 555
s.buf = bytes('hello,world')
func.bluetooth_proxy_cb(s)
注意:如果python调用的函数参数仅仅是个简单的指针,可以不用映射。
例如char *data;
func.bluetooth_proxy_cb(data)
2、python从c语言读取数据
既然能调用c语言链接库函数参数来发送数据,接收数据也可以从通过c语言函数返回值传递了。
python_data = func.bluetooth_proxy_cb(var)
3、python的c语言拓展
用c语言写好so,然后 import xxxx 来无缝结合
test.c
#include<Python.h>
static PyObject *test(PyObject *self, PyObject *args){
int arg1, arg2;
if(!(PyArg_ParseTuple(args, "ii", &arg1, &arg2))){
return NULL;
}
return Py_BuildValue("i", arg1 + arg2 * );
} static PyMethodDef testMethods[] = {
{"test", test, METH_VARARGS, "This is test"},
{NULL, NULL}
}; PyMODINIT_FUNC inittest(){
Py_InitModule("test", testMethods);
}
gcc -I /usr/include/python2.7/ -fpic --shared -o test.so test.c
test.py
import test
print test.test(1, 2) # 输出 21
demo在github上
https://github.com/zhoudd1/python_call_c
python和C语言混编的几种方式
http://www.cnblogs.com/Colin-Cai/p/7594551.html
python与c语言交互应用实例的更多相关文章
- nodejs与c语言交互应用实例
nodejs与c/c++交互目前主流的方式有两种,node addon c++ 和 node-ffi . 1.node addon c++ 1)nodejs从c语言读取数据 addon.c #incl ...
- python ctypes 探究 ---- python 与 c 的交互
近几天使用 python 与 c/c++ 程序交互,网上有推荐swig但效果都不理想,所以琢磨琢磨了 python 的 ctypes 模块.同时,虽然网上有这方面的内容,但是感觉还是没说清楚.这里记录 ...
- [转]python ctypes 探究 ---- python 与 c 的交互
近几天使用 python 与 c/c++ 程序交互,网上有推荐swig但效果都不理想,所以琢磨琢磨了 python 的 ctypes 模块.同时,虽然网上有这方面的内容,但是感觉还是没说清楚.这里记录 ...
- 2015/9/20 Python基础(16):类和实例
面向对象编程编程的发展已经从简单控制流中按步的指令序列进入到更有组织的方式中,依靠代码块可以形成命名子程序和完成既定的功能.结构化的或过程性编程可以让我们把程序组织成逻辑快,以便重复或重用.创造程序的 ...
- UML标准建模语言与应用实例
一.基本信息 标题:UML标准建模语言与应用实例 时间:2012 出版源:科技创新导报 领域分类:UML标准建模语言 面向对象 系统分析与设计 二.研究背景 问题定义:UML建模语言用图形来表现典型的 ...
- 比较分析C++、Java、Python、R语言的面向对象特征,这些特征如何实现的?有什么相同点?
一门课的课后题答案,在这里备份一下: 面向对象程序设计语言 – 比较分析C++.Java.Python.R语言的面向对象特征,这些特征如何实现的?有什么相同点? C++ 语言的面向对象特征: 对象模 ...
- 总结:Python学习 和 Python与C/C++交互
本篇仅仅是Python的学习和Python和C++数据对接过程中的一些总结. 由于工作的需要,用一周的时间学习 Python. Python是基于C实现的一门解释型语言,由于其易用性,俘获了不少开发者 ...
- Python爬虫教程-17-ajax爬取实例(豆瓣电影)
Python爬虫教程-17-ajax爬取实例(豆瓣电影) ajax: 简单的说,就是一段js代码,通过这段代码,可以让页面发送异步的请求,或者向服务器发送一个东西,即和服务器进行交互 对于ajax: ...
- python 面向对象六 类属性和实例属性
一.实例属性 Python是动态语言,根据类创建的实例可以任意绑定属性. >>> class Student(object): ... def __init__(self, name ...
随机推荐
- zend Studio10.6.2 下载
http://www.th7.cn/Program/php/201409/286788.shtml
- python中的字典 和 集合
python中字典是一种key-value的数据类型 字典的特性: 1.无序的 2.key必须的唯一的,so,字典天生去重 语法: 增加 修改 删除 查找 多级字典嵌套及操作 字典的其他用法 #set ...
- 第二百四十九节,Bootstrap附加导航插件
第二百四十九节,Bootstrap附加导航插件 学习要点: 1.附加导航插件 本节课我们主要学习一下 Bootstrap 中的附加导航插件 一.附加导航 注意:此插件要使用 bootstrap3.0. ...
- 如何创建Cookie? (选择1项)
如何创建Cookie? (选择1项) A. 使用new Cookie语句 B. 调用response.addCookie方法 C. 使用Cookie的setMaxAge方法 D. setCookie方 ...
- 【BZOJ】3172: [Tjoi2013]单词(后缀自动机)
http://www.lydsy.com/JudgeOnline/problem.php?id=3172 随便搞个sam就行了.(其实一开始看到数据n<=200, 单词长度不超过1e6,然后感觉 ...
- php中判断一个字符是否在字符串中
strpos() - 查找字符串在另一字符串中第一次出现的位置(区分大小写) stripos() - 查找字符串在另一字符串中第一次出现的位置(不区分大小写) strrpos() - 查找字符串在另一 ...
- Powershell理解汇总
官方帮助文档https://msdn.microsoft.com/zh-cn/powershell/scripting/powershell-scripting 管道/重定向 管道 : 是指把上一条 ...
- 将Oracle数据库转换为SQL Server
(转发)近期为公司的一个项目数据库进行了转换,将Oracle的Db转换为SqlServer(2000或2005均可),一开始在网上找了一些资料,发现有个工具叫SwisSql的,尝试了一下,没成功,继续 ...
- 1-2、superset国际化
最近由于工作需要研究开源可视化项目superset,由于其国际化做不怎么好,故而记录下国际化的过程,本篇本着『授人以鱼不如授人以渔』的原则,只叙述国际化的过程及方法,不提供直接的国际化文件. 为了方便 ...
- Eclipse之相关快捷键
Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键. 1.[ALT+/] 此快捷键为用户编辑的好帮手,能为用 ...