我不知道它是否是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中发生了什么,或者是否还有其他我错过的内容?
感谢。
答案 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']