1
我爲pidgin客戶端做了一些應答機,它使用Linuxes DBus與pidgin進行連接。代碼是這樣的:如何斷開python DBus連接?
class DBus_Answer():
def __init__(self, text = "No text"):
self.answer = text
bus_loop = DBusQtMainLoop(set_as_default=True)
self.bus = dbus.SessionBus()
self.bus.add_signal_receiver(self.pidgin_control_func,
dbus_interface="im.pidgin.purple.PurpleInterface",
signal_name="ReceivedImMsg")
def pidgin_control_func(self, account, sender, message, conversation, flags):
obj = self.bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
purple.PurpleConvImSend(purple.PurpleConvIm(conversation), self.answer)
現在我想用它作爲另一個程序中的模塊。我把它叫做是這樣的:
answering_machine.DBus_Answer(message)
的問題是,當我停止第二程序,然後再次啓動它(有這個作爲一個模塊的程序),我會得到一個segmentation fault
,因爲它要與DBus建立另一個連接,並且它不是經常性的!
其他明智我想給這個模塊禁用用戶的機會。我試圖使用if
聲明。它會第一次工作。但是如果用戶只運行一次模塊,他就不能再禁用它了。
很難說如果你不發表一個獨立的例子。你可以使用'DBus_Answer'發佈一個小程序來展示問題嗎?爲每個答案獲得主循環似乎是錯誤的,你應該只有一個主循環。這可能是問題所在。 –