【问题标题】:sed substitution subexpress system call in pythonpython中的sed替换subexpress系统调用
【发布时间】:2012-09-17 17:51:18
【问题描述】:

不知道是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 中发生了什么,或者是否还有其他我错过的东西?

谢谢。

【问题讨论】:

    标签: python replace sed system-calls


    【解决方案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']

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      • 2011-09-17
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多