我为pidgin客户端制作了某种答录机,该答录机使用Linuxes DBus与pidgin建立连接。代码是这样的:

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语句。它将第一次工作。但是如果用户一次运​​行该模块,则无法再禁用它。

最佳答案

出现分段错误是因为在python模块(用C编写)中指针为NULL,或者因为它指向随机内存(可能从未初始化为任何东西),或者因为它指向已被释放/释放/“删除”的内存。因此您的问题可能出在您的记忆上。请尝试使用here中所述的方法跟踪segfault

关于python - 如何断开python DBus连接?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12457639/

10-10 12:36