使用子进程从python运行终端命令
我想从我的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)'
我觉得这事错花括号“(”, 我如何甲阶酚醛这个问题,帮我请提前 感谢
的问题!是什么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)'])
编辑:适应于问题
如何安排这个命令'kubectl apply -f
编辑,以匹配您的命令 –
它返回'/斌/庆典:istioctl:找不到命令 错误:没有传递的对象适用 1' –
你能运行终端这个命令? – Sraw
@Sraw yup!它从终端工作。 –
将os.path.join(路径)保存在一个变量中,并将该变量追加到subprocess.call中 –