1

LinuxesDBusを使用してpidginと接続する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)

問題は、2番目のプログラム(これをモジュールとして持つプログラム)を停止してから再開するsegmentation faultと、DBusに別の接続を確立したいので、定期的ではないため、が発生することです。

それ以外の場合は、このモジュールを無効にする機会をユーザーに提供したいと思います。ifステートメントを使おうとしました。初めて動作します。ただし、ユーザーがモジュールを1回実行すると、それ以上無効にすることはできません。

4

1 に答える 1

1

セグメンテーション違反は、Pythonモジュール(Cで記述)でポインタがNULLであるか、ランダムメモリを指している(おそらく何にも初期化されていない)ため、または解放/割り当て解除/「削除」されたメモリを指しているために発生します。したがって、問題はおそらくメモリにあります。ここで説明する方法を使用して、segfaultをトレースしてみてください

于 2012-12-16T23:38:08.953 に答える