5

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

我想调用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 '$='”尝试了不同的转义组合,但似乎没有任何效果。

4

2 回答 2

4

-n并且$=是两个独立的论点。

["sed", "-n", "$=", filename]
于 2013-07-24T14:33:19.170 回答
1

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

在不调用 shell 的情况下,每个参数都未经解释地传递给 sed 所以 sed 将参数读取为 -n '$='

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

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

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

cmd = subprocess.Popen(["sed", "-n", "$=", filename], stdout=subprocess.PIPE)
于 2013-07-24T14:41:33.733 回答