为什么我作为subprocess()命令传递的列表没有正确扩展的任何想法?
file_name = "some_make_file"
cmd = ['gmake', '-pn', '-f', file_name, '|', 'grep', '-A1', '"^# makefile"', '|', 'grep', '-v', '"^#\|^--"', '|', 'sort', '|', 'uniq']
proc = Popen(cmd, stdout=PIPE, stderr=PIPE)
stdout, stderr = prod.communicate()
输出是一个gmake错误,如果我自己加入cmd以在cmd行上测试它,我会得到这个:
#join
" ".join(cmd)
#output
('gmake -pn -f some_make_file | grep -A1 "^ makefile" | grep -v '
'"^#\\|^--" | sort | uniq')
对于我的生活,我似乎无法弄清楚这个命令有什么问题。有任何想法吗?我没有正确地逃避一些事情吗?添加一个特殊的字符而没有意识到它?
答案 0 :(得分:0)
您没有运行中间shell,因此无法解释|作为管道命令。即使你设置shell = True,因为你传入了一个列表,它将被转义。管道的正确方法在官方python docs Replacing Shell Pipeline - tdelaney
中给出