我遇到了正确转义子进程调用的问题
我想调用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'$ ='”尝试了不同的转义组合,但似乎没有任何效果。
答案 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)