在Popen之后,glib主循环挂起

时间:2013-07-31 19:31:27

标签: python popen glib dbus

我正在尝试构建一个脚本,当另一个窗口变为活动状态时,该脚本会记录窗口标题。这就是我到目前为止所做的:

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!”每次切换到新窗口时都会打印在shell中。

通过Popencommunicate()调用,脚本会打印一个“Hello world”并在此之后挂起。

有谁知道:

  • 我如何获得正确的错误消息?
  • 我在Popen电话中出错了什么?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我无法评论......您还没有导入过程模块或其成员(Popen,PIPE)。

相关问题