2017-09-04 95 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' –