在python中转义子进程调用的正确方法

在python中转义子进程调用的正确方法,python,sed,Python,Sed,我在正确转义子进程调用时遇到问题 我想调用sed-n“$=”/path/to/file来计算文件中的行数,但在python中无法这样做。我的代码如下: import subprocess filename = "/path/to/file" cmd = subprocess.Popen(["sed", "-n '$='", filename], stdout=subprocess.PIPE) cmd_out, cmd_err = cmd.communicate() num_lines = i

我在正确转义子进程调用时遇到问题

我想调用
sed-n“$=”/path/to/file
来计算文件中的行数,但在python中无法这样做。我的代码如下:

import subprocess

filename = "/path/to/file"

cmd = subprocess.Popen(["sed", "-n '$='", filename], stdout=subprocess.PIPE)
cmd_out, cmd_err = cmd.communicate()
num_lines = int(cmd_out.strip())

print num_lines

我尝试了“-n'$=”的不同转义组合,但似乎没有任何效果。

-n
$=
是两个独立的参数

["sed", "-n", "$=", filename]

默认情况下,subprocess.Popen的shell=False

在不调用shell的情况下,每个参数都会毫无疑问地传递给sed 因此sed将参数读取为-n'$='

运行命令sed-n'$='时,shell在发送到命令sed之前删除“”

因此,您的$=应该不带引号

正如Ignacio所指定的,-n$=参数应该是分开的

cmd = subprocess.Popen(["sed", "-n", "$=", filename], stdout=subprocess.PIPE)

谢谢,我以为参数是以单个字符串而不是列表的形式传递的。