在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)
谢谢,我以为参数是以单个字符串而不是列表的形式传递的。