使用Python脚本执行kubectl命令报FileNotFoundError如何解决?
报错根因
subprocess模块默认执行规则为:若传入subprocess.check_output()的第一个参数是完整字符串,会将整个字符串视为单个可执行文件的路径进行检索,不会自动拆分命令名和后续参数。你的代码中系统尝试搜索名为kubectl apply -f deployment.yaml的文件,自然触发FileNotFoundError报错。
修复方案
两种可行修复方式如下:
- 方案1(官方推荐,无注入风险):将命令拆分为独立元素组成的列表传参
import subprocess # 按空格拆分命令为单独列表项 command = ["kubectl", "apply", "-f", "deployment.yaml"] check_output = subprocess.check_output(command) # 命令返回结果默认是bytes类型,转UTF-8字符串方便查看 print(check_output.decode("utf-8"))
- 方案2(仅适合无用户可控参数的场景):添加
shell=True参数,让系统通过shell层自动解析命令字符串
import subprocess command = 'kubectl apply -f deployment.yaml' # 新增shell=True参数 check_output = subprocess.check_output(command, shell=True) print(check_output.decode("utf-8"))
额外注意事项
修复后如果仍报错,需要核对两个前提条件:
- 执行脚本的环境已经正确安装kubectl,且kubectl所在路径已加入系统PATH变量
- 脚本执行的当前工作目录下存在
deployment.yaml文件,或者在命令中填写该文件的绝对路径
内容的提问来源于stack exchange,提问作者user1591156
相关产品推荐
相关产品推荐

