我正在用python创建一个命令字符串,它需要使用pexpect在主机上执行。我希望在主机上运行的sed命令如下:
sed -i 's/\(panic=30\)/\1 my_cool_option/g' /boot/bootrc
如何在python中创建一个保留反斜杠的变量?起初,我试过了
^{pr2}$当我在python shell中检查上述代码时,它看起来很正常:
>>> bootrc = '/boot/bootrc'
>>> param = 'ignorefs'
>>> cmd = "sed -i 's/\(panic=30\)/\\1 {}/g' {}".format(param, bootrc)
>>> print cmd
sed -i 's/\(panic=30\)/\1 ignorefs/g' /boot/bootrc
但是,当我通过pdb了解代码失败的原因时,cmd被设置为
(Pdb) p cmd
"sed -i 's/\\(panic=30\\)/\\1 ignorefs/g' /boot/bootrc"
我不知道如何生成正确的字符串来执行sed命令。在
谢谢
我知道你的问题已经得到了回答,但是为了将来的参考,如果你有一个带反斜杠的字符串,并且你想确定它包含你认为应该包含的内容,你可以逐字符扫描并打印它,例如
输出
^{pr2}$这让我在第一次读到你的问题时感到困惑,但是请看一下string literals页
您可能知道,python使用反斜杠字符
\
作为转义符。因此,要在字符串文本中包含新行,我们键入如果我们想要一个真正的反斜杠,我们使用双反斜杠
^{pr2}$如果反斜杠后面的字符与转义序列不匹配,则反斜杠保持原样
这就是你的
\(
所发生的事情——你最终得到了<backslash><open parnes>
但是
\1
与转义序列匹配,它是字符的八进制表示的文本。所以不是<backslash>1
,而是<0x01>
。在当您在pdb中使用
p cmd
时,它正在打印字符串的repr
,这恰好对不可打印的字符使用了反斜杠转义。这与在pythonshell中使用print cmd
不同。在Pdb显示你只有一个反斜杠。类似于
所以当你说
所有的双反斜杠对都是单反斜杠字符。与注释中工作示例的不同之处在于,在打开/关闭parens前面有文本反斜杠。在
最后,如果不想担心反斜杠转义,可以使用原始字符串
相关问题 更多 >
编程相关推荐