sed替换subexpress系统调用python

时间:2012-09-26 06:47:59

标签: python replace sed system-calls

我不知道它是否是python bug或其他什么。

我有一个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

但是我将它与python结合起来,它给了我一个奇怪的结果:

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

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

我已经尝试使用system()的PHP,它运行正常。我也尝试过python中的子进程,结果是一样的。

它可能是python中的管道处理问题吗?

我想知道在python中发生了什么,或者是否还有其他我错过的内容?

感谢。

1 个答案:

答案 0 :(得分: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

[问题是python对待" \ 1"作为字符串' \ x01']