我为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
语句。它将首次运作。但如果用户运行模块一次,他就不能再禁用它了。
答案 0 :(得分:1)
发生分段错误是因为在python模块中(用C编写)指针是NULL,或者因为它指向随机存储器(可能从未初始化为任何东西),或者因为它指向已释放/解除分配的内存/“删除“。所以你的问题可能在于你的记忆。使用描述的方法跟踪段错误here