以下命令在K8s中可以正确运行
kubectl exec -n nginx-ingress $(kubectl get pods -n nginx-ingress -o wide -LhaRole | grep nginx-ingress | grep Running | awk '{print $1}') -it -- /bin/bash
如果我将其放入Python脚本中,如下所示,
#!/usr/bin/python
import subprocess
subprocess.run('kubectl exec -n nginx-ingress $(kubectl get pods -n nginx-ingress -o wide -LhaRole | grep nginx-ingress | grep Running | awk '{print $1}') -it -- /bin/bash', shell=True)
结果显示SyntaxError:无效语法。
任何人都可以帮我纠正它并让它运行吗?
提前非常感谢。
[root@k8s-master temp]# kubectl exec -n nginx-ingress $(kubectl get pods -n nginx-ingress -o wide -LhaRole | grep nginx-ingress | grep Running | awk '{print $1}') -it -- /bin/bash
nginx@nginx-ingress-b9fcfbb59-cn647:/$
nginx@nginx-ingress-b9fcfbb59-cn647:/$ exit
exit
[root@k8s-master temp]#
[root@k8s-master temp]# ./k8s.py
File "/home/jin/temp/./k8s.py", line 9
subprocess.run('kubectl exec -n nginx-ingress $(kubectl get pods -n nginx-ingress -o wide -LhaRole | grep nginx-ingress | grep Running | awk '{print $1}') -it -- /bin/bash', shell=True)
^
SyntaxError: invalid syntax
[root@k8s-master temp]#
[root@k8s-master temp]#
根据您分享的内容,我相信您遇到了语法错误,因为您的脚本在命令字符串内部和外部都使用了单引号。在 Python 中,这会提前结束字符串。
请注意,
-it
命令中的kubectl exec
标志用于交互式终端,这可能不会在您的Python脚本中按预期运行。
我建议您修改脚本,用三个单引号 (
'''
) 将命令括起来,这样,您就可以在字符串中包含单引号,而无需转义它们。您可以在[此处][1]了解有关使用引号的更多信息。
我还从
-it
命令中删除了 kubectl exec
标志,以确保该命令可以在您的脚本中执行。
#!/usr/bin/python
import subprocess
command = '''kubectl exec -n nginx-ingress $(kubectl get pods -n nginx-ingress -o wide | grep nginx-ingress | grep Running | awk '{print $1}') -- /bin/bash'''
subprocess.run(command, shell=True)
尝试一下,如果有帮助请告诉我。