2009-08-14 272 views
0

我必须解析需要的字符串。 这是命令我执行在Linux控制台:Python和正则表达式

amixer get Master |grep Mono: 

而得到的,例如,

Mono: Playback 61 [95%] [-3.00dB] [on] 

然后,我从蟒蛇的控制台测试:

import re,os 
print re.search(ur"(?<=\[)[0-9]{1,3}", u" Mono: Playback 61 [95%] [-3.00dB] [on]").group()[0] 

而得到的结果:这就是我需要的。但是如果我将脚本更改为:

print re.search(ur"(?<=\[)[0-9]{1,3}", str(os.system("amixer get Master |grep Mono:"))).group()[0] 

它会返回无对象。为什么?

回答

7

os.system()从应用程序返回退出代码,而不是应用程序的文本输出。

您应该阅读subprocess Python模块;它会做你需要的。

+0

如果我这样做:TEMP =使用os.system(” amixer get Master | grep Mono:“)&print temp我得到输出结果。或者我错了? – Ockonal 2009-08-14 17:28:00

+0

该命令的输出将直接标准输出,而不是“temp”变量。尝试使用'print'运行该测试,temp的值是%s个字符,并且是:%s“%(len(temp),temp) – retracile 2009-08-14 17:30:10

+0

谢谢,现在我明白了 – Ockonal 2009-08-14 17:37:28

0

如何运行过程和得到的输出:

http://docs.python.org/library/popen2.html

+0

从版本2.6开始不推荐使用:此模块已过时。使用'subprocess'模块。 – SilentGhost 2009-08-14 17:29:08

+0

该文档中链接了哪些内容,但我发现popen更清晰。尽管感谢downvote。 – 2009-08-14 17:37:04

1

而不是使用os.system()的,使用subprocess模块:

from subprocess import Popen, PIPE 
p = Popen("amixer get Master | grep Mono:", shell = True, stdout = PIPE) 
stdout = p.stdout.read() 
print re.search(ur"(?<=\[)[0-9]{1,3}", stdout).group() 
+0

也谢谢你的例子。 – Ockonal 2009-08-14 17:38:03