1
任何想法爲什麼我作爲我的命令傳遞給subprocess()的列表不能正確擴展?Python - subprocess cmd列表不能正確擴展
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')
因爲如果我,我似乎無法生活找出這個命令有什麼問題。有任何想法嗎?我沒有正確地逃避什麼嗎?添加一個特殊的字符而沒有意識到它?
實際的命令是否按照提供的方式運行?嘗試執行聯合命令時,shell會顯示什麼錯誤? –
該命令按照提供的方式運行,這就是爲什麼我試圖加入列表來測試實際傳遞給subprocess.Popen()的內容的原因。問題在於該列表以某種方式改變了命令。輸出是一個gmake錯誤消息。 – user797963
不,問題在於您將管道角色作爲參數傳遞給gmake,而不是創建shell管道。可以使用'shell = True'或者(最好)使用['pipes'](https://docs.python.org/3/library/pipes.html)。甚至可以用bash或zsh而不是Python編寫你的shell腳本。 – Kevin