Python不能正确运行shell命令

Python不能正确运行shell命令,python,linux,bash,shell,sed,Python,Linux,Bash,Shell,Sed,我有以下pythonsript- import os command = "echo '12345 Tomcat' | sed -n 's/.*\(^.[0-9]*\).*/\1/p'" os.system(command) 它打印ascii零字符- 尝试在shell中运行此命令。它应该打印12345 这是为什么?Python正在解释您的反斜杠。您可以改用“原始”Python字符串表示法: command = r"echo '12345 Tomcat' | sed -n 's/.*\(^.[

我有以下pythonsript-

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

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


这是为什么?

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
是转义序列(图像实际显示的是转义序列,而不是
\0
)。您希望将其视为字符
\
1
,因此在字符串前面加上
r
,以使字符串文字“原始”:


也许反斜杠需要转义?@user000001是的。现在,我觉得很傻。而且,如果上面的命令是你想要达到的,你可能想考虑在字符串中使用<代码> Re/<代码>模块或<代码> .SultId()/Case>方法。@对于那些知道如何编写<代码> ReXEX <代码>的人,请使用<代码> SED < /代码>你认为我不会知道吗?)这是我的命令的精简版本,只是为了说明这一点。@kshitizzarma,这就是为什么它是一个注释。。“如果”在开头;)哦不知道
r“…”
语法。从哪个版本开始,是否支持此语法?(问这个问题,因为我可能需要处理旧的python版本(version@anishsane:语法是在Python 1.5中引入的:来自7.2.5.8.原始字符串表示法
command = r"echo '12345 Tomcat' | sed -n 's/.*\(^.[0-9]*\).*/\1/p'"