2009-08-14 243 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