2012-09-26 16 views
1

我不知道它是python的bug還是其他的東西。python中的sed替換subexpress系統調用

我有一個bash命令來獲取br0 IP地址。它的工作原理以及在Bash shell中

$ip -o -4 address show br0 | sed "s/^.*inet *\(.*\)\/[0-9]* brd.*$/\1/g" 
$192.168.10.1 #output this 

但onece我使用python結合起來,它給了我怪異的結果:

>>>import commands as c 
>>>c.getstatusoutput('ip -o -4 address show br0 | sed "s/^.*inet *\(.*\)\/[0-9]* brd.*$/\1/g"') 

>>>(0, '\x01') #output 

我曾嘗試用PHP和system()正常工作。我也嘗試了Python中的子進程,結果是一樣的。

它可能是一個在Python中的管道處理問題?

我想知道python中發生了什麼,或者如果還有其他東西我錯過了?

謝謝。

回答

1

Python正在解釋字符串中的反斜槓,嘗試使用原始字符串,即。 r'ip -o -4 address show br0 | sed "s/^.*inet *\(.*\)\/[0-9]* brd.*$/\1/g"'

>>> import commands as c 
>>> c.getstatusoutput(r'ip -o -4 address show br0 | sed "s/^.*inet *\(.*\)\/[0-9]* brd.*$/\1/g"') 

如果你是好奇,嘗試這一點,並注意區別:

>>> print "s/^.*inet *\(.*\)\/[0-9]* brd.*$/\1/g" 
s/^.*inet *\(.*\)\/[0-9]* brd.*$//g 
>>> print r"s/^.*inet *\(.*\)\/[0-9]* brd.*$/\1/g" 
s/^.*inet *\(.*\)\/[0-9]* brd.*$/\1/g 

[問題是,蟒蛇對待 「\ 1」 作爲字符串 '\ X01']

+0

原始字符串請參閱http://docs.python.org/reference/lexical_analysis.html – linarnan