2013-07-31 30 views
0

我试图建立一个脚本,当另一个窗口变为活动状态时,记录窗口标题。这是我到目前为止:glib主循环在Popen后挂起

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!”每当我切换到一个新窗口时都会打印在外壳中。

随着Popencommunicate()调用,该脚本打印一个单一的“你好世界”,然后挂起。

有谁知道:

  • 我怎样才能得到正确的错误消息?
  • 我在做什么错在我的Popen打电话?

在此先感谢!

回答

0

我不能只是评论...你还没有导入过程模块或其成员(Popen,PIPE)。