python - sed在python中替换subexpress系统调用

标签 python replace sed system-calls

我不知道这是一个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/

相关文章:

python - Scikit learn中的R2值是怎么计算出来的?

python - 计算列表中整数的最优雅方法

string - 将多个月份字符串替换为month-ints

sed - 如何在行范围内执行 sed 替换?

Bash:如何在 osx bash 中用新行替换字符串?

linux - 列出Linux中配额超过指定值的用户

python - pandas 分组数据框 - python

regex - 在 sed 中无法用新行替换数字,但可以在 sublime 中替换

JavaScript 替换?

当调用外部方法时,嵌套在方法中的Python字典会自动执行所有值(方法)