1

我不知道它是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 

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

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

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

谢谢。

4

1 回答 1

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']

于 2012-09-26T06:59:14.870 回答