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

时间:2013-07-24 14:28:22

标签: 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 = int(cmd_out.strip())

print num_lines

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

2 个答案:

答案 0 :(得分:4)

-n$=是两个不同的参数。

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

答案 1 :(得分:1)

默认情况下,subprocess.Popen具有shell = False。

在不调用shell的情况下,每个参数都会被解释为sed 所以sed读取参数为-n'$ ='

当您运行命令sed -n'$ ='时,shell会在发送到命令sed之前删除''。

所以你的$ =应该没有引号

根据Ignacio的规定,-n $ =参数应该是分开的

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