2017-09-04 92 views
1

我想從我的django運行一個終端命令,但得到一個錯誤。使用子進程從python運行終端命令

這是我要運行的命令:

kubectl apply -f <(istioctl kube-inject -f FILE_PATH) 

這是我曾嘗試: 從views.py

nodesvc = subprocess.call('kubectl apply -f <(istioctl kube-inject -f ' + os.path.join(path) + '/nodeService.yaml)', 
             shell=True) 

我創建的臨時目錄,然後通過一個文件這是這裏的道路,這是正確的。

這裏的錯誤:

/bin/sh: -c: line 0: syntax error near unexpected token `(' 
/bin/sh: -c: line 0: `kubectl apply -f <(istioctl kube-inject -f /var/folders/g2/8fzl8mjj5xxfqdfvrl7v3q_40000gn/T/tmpstfcq3es/nodeService.yaml)' 

我覺得這事錯花括號「(」, 我如何甲階酚醛這個問題,幫我請提前 感謝

+0

你能運行終端這個命令? – Sraw

+0

@Sraw yup!它從終端工作。 –

+0

將os.path.join(路徑)保存在一個變量中,並將該變量追加到subprocess.call中 –

回答

0

的問題!是什麼shell python調用不支持過程替換通過<(..)。什麼適用於我:

subprocess.call(["/bin/bash", "-c", "wc -l <(sort something.txt)"]) 

這強制將shell作爲bash調用,這通常支持進程替換。爲了您的命令,這應該工作:

subprocess.call(["/bin/bash", "-c", 'kubectl apply -f <(istioctl kube-inject -f ' + os.path.join(path) + '/nodeService.yaml)']) 

編輯:適應於問題

+0

如何安排這個命令'kubectl apply -f <(istioctl kube ?-inject -f FILE_PATH)'根據你的建議 –

+0

編輯,以匹配您的命令 –

+0

它返回'/斌/慶典:istioctl:找不到命令 錯誤:沒有傳遞的對象適用 1' –