我不知道这是一个Python错误还是其他什么。
我有一个 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 中发生了什么,或者是否还有其他我错过的事情?
谢谢。
最佳答案
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”]
关于python - sed在python中替换subexpress系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12596053/