如何利用python dbus来发送一个信号
来源:互联网 发布:手机淘宝有卖家版app 编辑:程序博客网 时间:2024/05/22 06:05
简介
dbus用于进程间通信,可以降低不同程序间的耦合性,dbus的原理同分布式计算很象,其中一个介绍原理的网址为:官方的文档
用python来操作dbus很方便,python-dbus的教程: 教程
一些官方例子: 例子
简单过程
1.首先要从dbus.service.Object继承,这样才可以输出方法和信号,同时调用dbus.service.Object来初始化bus类型(Session bus or System bus),以及 对象路径
class Msg(dbus.service.Object):def __init__(self,bus,object_path):
dbus.service.Object.__init__(self,bus,object_path)
2.输出信号,先修饰,信号要传递的参数有signature确定,然后再定义信号函数,信号函数体本身没多大意义,有意义的只在于函数体的参数,在dbus中的信号名就是这个信号函数的名字
@dbus.service.signal(dbus_interface=MSG_INTERFACE_URI,signature='as') #发送了一个可变数组,但数组的类型要一致,这里都是string
def msg_signal(self,msg_list):
print "exported signal: ",msg_list #这个没有意义
3..定义一个发送信号的函数,注意要返回True,否则如果调用timeout_add的时候,它执行了一次就会停下来,不会重复执行,因为timeout_add碰到False的时候就会停止执行
发送信号,其实也就只是调用刚才修饰的信号函数而已
def construct_msg(self):timeStamp = time.strftime(TIMEFORMAT)
self.msg_signal(["1111",timeStamp,"This is the content","1 2 3"])
return True
4.连接到bus,注意在连接前要先选好loop的类型,否则不让连接
DBusGMainLoop(set_as_default=True) #选好loop的类型bus = dbus.SessionBus()
aMsg = Msg(bus,MSG_OBJ_PATH) #将对象输出到bus中
gobject.timeout_add(1000,aMsg.construct_msg) #定时发送信号,知道其中的函数返回False为止
loop = gobject.MainLoop()
loop.run()
完整程序
#!/usr/bin/python
import dbus
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop
import time
import gobject
MSG_OBJ_PATH = "/com/example/msg"
MSG_INTERFACE_URI = "com.example.msg"
TIMEFORMAT = "%H:%M:%S"
class Msg(dbus.service.Object):
def __init__(self,bus,object_path):
dbus.service.Object.__init__(self,bus,object_path)
@dbus.service.method(dbus_interface=MSG_INTERFACE_URI,
in_signature='', out_signature='s')
def say_hello(self):
return "hello, exported method"
@dbus.service.signal(dbus_interface=MSG_INTERFACE_URI,
signature='as')
def msg_signal(self,msg_list):
print "exported signal: ",msg_list
def construct_msg(self):
timeStamp = time.strftime(TIMEFORMAT)
self.msg_signal(["1111",timeStamp,"This is the content","1 2 3"])
return True
if __name__ == "__main__":
DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
aMsg = Msg(bus,MSG_OBJ_PATH)
gobject.timeout_add(1000,aMsg.construct_msg)
loop = gobject.MainLoop()
loop.run()
- 如何利用python dbus来发送一个信号
- 如何利用python dbus来发送一个信号
- 【C语言】利用kill函数实现一个进程向另一个进程发送信号
- 如何高效的利用dbus做client-server架构
- 利用python发送短信
- 利用python发送邮件
- 利用Javamail来发送邮件
- 利用python发出rs232信号
- 如何利用一个变量来达到多重循环的效果?
- 如何利用openssl来计算一个文件的MD5值?
- Qt中如何利用QPushButton来实现一个弹出菜单
- 如何利用openSsl来计算一个文件的md5值?
- dbus 信号和方法测试
- 如何使用dbus glib-binding传递一个图片文件
- Qt5利用函数指针来区分信号
- 利用dbus-send在命令行下给程序发送消息,调用其相应的函数
- 利用python调用elasticsearch-api来分析数据并作图进行日报邮件发送
- 用Python来发送邮件
- 程序的变量常量保存问题
- Linux磁盘自动挂载
- send,recv,sendto,recvfrom
- 上图:turbo prolog
- 联发科挑起价格战,山寨手机洗牌加速
- 如何利用python dbus来发送一个信号
- 预处理命令-条件编译
- USACO算法系列九——kimbits
- asp.net 验证码_彩色
- MySQL 创建用户的Grant命令用法
- 谈Android中GoogleMap的使用(二)
- 先安装Ubuntu再安装Window 7导致的双系统引导问题
- ZOJ 1438 Asteroids!
- 日志过滤及工具SWATCH简介