我在使用此代码时遇到一些麻烦。基本上,我想要的是检查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 我只是想让它再次起作用并削减一些脂肪。
答案 0 :(得分:1)
GetWindowsPipe()
返回管道对象,它是一个类似文件的对象。要获取文字,您需要致电pipe.read()
。
你应该替换它:
if spot in pipe:
found = True
print 'found'
break
有了这个:
if spot in pipe.read():
found = True
print 'found'
break