Python没有正确运行shell命令

时间:2013-12-31 08:28:31

标签: python linux bash shell sed

我有以下python脚本 -

import os
command = "echo '12345 Tomcat' | sed -n 's/.*\(^.[0-9]*\).*/\1/p'"
os.system(command)

打印ascii零字符 - enter image description here

尝试在shell中运行此命令。它应该打印12345

为什么会这样?

2 个答案:

答案 0 :(得分:4)

Python正在解释你的反斜杠。您可以改为使用“原始”Python字符串表示法:

command = r"echo '12345 Tomcat' | sed -n 's/.*\(^.[0-9]*\).*/\1/p'"

或者,再次逃避反斜杠:

command = "echo '12345 Tomcat' | sed -n 's/.*\\(^.[0-9]*\\).*/\\1/p'"

答案 1 :(得分:2)

\1是一个转义序列(这是你的图像实际显示的,而不是\0)。您希望将其视为字符\1,因此请在字符串前添加r以使字符串文字为“原始”:

command = r"echo '12345 Tomcat' | sed -n 's/.*\(^.[0-9]*\).*/\1/p'"