我正在尝试从我的django运行终端命令,但收到错误。
这是我想要运行的命令:
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 :(得分:2)
问题是无论shell调用什么shell都不支持通过<(..)
进行进程替换。什么对我有用:
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)'])
编辑:适应问题