简单的python循环使用wmctrl来比较窗口名称

时间:2013-12-01 02:10:17

标签: python spotify

我在使用此代码时遇到一些麻烦。基本上,我想要的是检查wmctrl -l的输出为这个字符串:“Spotify - ”。如果存在,请取消静音。如果它不存在和/或wmctrl -l包含一个名为“Spotify”的条目(行尾),那么我想静音。

大多数代码都在工作,问题是,GetWindowsPipe()只吐出一行<open file '<fdopen>', mode 'rb' at 0x7f7a5f854660>。不知道发生了什么。

有人会善意解决这个可能很简单的问题吗?

代码:

import subprocess, time, pdb

def GetWindowsPipe():
    pipe = subprocess.Popen("wmctrl -l", shell=True, stdout=subprocess.PIPE).stdout
    return pipe

def LowerVolume():
    subprocess.Popen("amixer -q set Master mute", shell=True)
    print 'Lowering volume'
    global volumeIsLow
    volumeIsLow = True

def RaiseVolume():
    subprocess.Popen("amixer -q set Master unmute", shell=True)
    print 'Raising volume'
    global volumeIsLow
    volumeIsLow = False

def Run():
    print 'Starting blockify.'

    global volumeIsLow    
    volumeIsLow = False
    RaiseVolume()

    while(True):

        found = False
        pipe = GetWindowsPipe()
        spot = "Spotify - "

        if spot in pipe:
            found = True
            print 'found'
            break

        if found:
            if (not volumeIsLow):
                LowerVolume()
        elif volumeIsLow:
            RaiseVolume()

        time.sleep(1)

if __name__ == "__main__":
    Run()

此脚本有一个扩展版本:http://pastebin.com/4RtTQCtf 我只是想让它再次起作用并削减一些脂肪。

1 个答案:

答案 0 :(得分:1)

GetWindowsPipe()返回管道对象,它是一个类似文件的对象。要获取文字,您需要致电pipe.read()

你应该替换它:

 if spot in pipe:
    found = True
    print 'found'
    break

有了这个:

 if spot in pipe.read():
    found = True
    print 'found'
    break