通过Python subprocess.Popen()将转义字符传递给grep -e命令

时间:2014-12-18 18:23:22

标签: python regex bash grep subprocess

我想使用subprocess:grep -e '^commit [a-z0-9]{40}'

从Python调用此命令

当我直接在终端中调用此命令时,除非我使用反斜杠转义大括号,否则它不起作用,如:grep -e '^commit [a-z0-9]\{40\}'

当我尝试使用转义字符将此字符串传递给使用python中的Popen的命令时,它不起作用。这是我尝试过的:

grepCommand = ['grep', '-e', "'^commit [a-z0-9]\\{{{0}\\}}'".format("40")]
grepCommand = ['grep', '-e', "'^commit [a-z0-9]\\\\{{{0}\\\\}}'".format("40")]
grepCommand = ['grep', '-e', "^commit [a-z0-9]\\{{{0}\\}}".format("40")]
grepCommand = ['grep', '-e', "^commit [a-z0-9]\\\\{{{0}\\\\}}".format("40")]

如何在python中正确格式化这个字符串,以便我可以通过Popen将它传递给grep?

1 个答案:

答案 0 :(得分:1)

列表已经是参数分隔,因此不需要'的额外引用:

grepCommand = ['grep', '-e', r"^commit [a-z0-9]\{{{0}\}}".format("40")]