0

別のウィンドウがアクティブになったときにウィンドウのタイトルをログに記録するスクリプトを作成しようとしています。これは私がこれまでに持っているものです:

import glib
import dbus
from dbus.mainloop.glib import DBusGMainLoop

def notifications(bus, message):
    if message.get_member() == "event":
        args = message.get_args_list()
        if args[0] == "activate":
            print "Hello world"
            activewindow = Popen("xdotool getactivewindow getwindowname", stdout=PIPE, stderr=PIPE); 
            print activewindow.communicate()



DBusGMainLoop(set_as_default=True)

bus = dbus.SessionBus()
bus.add_match_string_non_blocking("interface='org.kde.KNotify',eavesdrop='true'")
bus.add_message_filter(notifications)

mainloop = glib.MainLoop()
mainloop.run()

しかし、私の Popen 呼び出しには明らかに問題があり、glib はエラーを飲み込んでいるようです。少なくとも、それは IRC チャンネルの誰かが私に言ったことです。と の呼び出しを削除するPopenactivewindow.communicate()、すべてが機能し続け、「Hello world!」というメッセージが表示されます。新しいウィンドウに切り替えるたびにシェルに出力されます。

Popenとの呼び出しによりcommunicate()、スクリプトは単一の「Hello world」を出力し、その後ハングします。

誰か知っていますか:

  • 適切なエラー メッセージを取得するにはどうすればよいですか?
  • Popen通話で何が間違っていますか?

前もって感謝します!

4

1 に答える 1