如何利用python dbus來傳送乙個訊號

2021-09-30 08:30:20 字數 2495 閱讀 7955

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_inte***ce=msg_inte***ce_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為止

如何利用anaconda來擴充套件pycharm庫

python 錯誤 attributeerror module pip has no attribute main 我在網上查了下說版本太高了pip要降級,降級完成之後又報了個錯誤 pip.vendor.urllib3.exceptions.readtimeouterror httpsconnect...

如何利用作業來偷懶?

如何利用作業來偷懶?作業的基本概念 作業 是指使用者向系統提交並要求執行的乙個任務。乙個作業對於乙個或多個程序。前台與後台 前台作業 與使用者進行互動操作。後台作業 不接受終端的輸入,但向終端輸出執行結果。前段和後台執行命令的語法格式 command 前台執行 command 後台執行 comman...

如何利用PowerBroker來防止橫向滲透

毫無疑問,任何乙個組織或公司都有可能受到網路攻擊。攻擊者可能已經盯上你很久了,並策劃對你的組織發動一場有針對性的攻擊,或者說他們也有可能通過社工技術或網路釣魚攻擊來以 廣撒網 的形式來攻擊你。無論是通過哪一種方式,攻擊者一旦進入了你的網路系統,他們就可以到處收集敏感資料 訪問企業郵箱或搜尋特權憑證等...