Kotlin新手求助:编写Kotlin脚本执行kubectl命令并解析输出
Kotlin脚本执行kubectl命令并解析输出
嘿,作为Kotlin新手能直接上手写实用脚本超棒!我来给你写一个符合要求的简单kts脚本,一步步帮你实现执行kubectl命令、获取输出并解析的功能:
完整脚本示例
import java.util.StringTokenizer fun main() { // 定义要执行的kubectl命令 val command = listOf("kubectl", "get", "pods", "-o", "jsonpath='{range .items[*]}{.spec.containers[].image}{\"\\n\"}{end}'") // 执行命令并配置输出重定向 val process = ProcessBuilder(command) .redirectError(ProcessBuilder.Redirect.INHERIT) // 把错误输出同步到控制台,方便调试 .start() // 读取命令的标准输出内容 val output = process.inputStream.bufferedReader().readText() // 等待命令执行完成,检查退出状态 val exitCode = process.waitFor() if (exitCode != 0) { println("kubectl命令执行失败,退出码:$exitCode") return } // --- 方式1:Kotlin原生简洁解析法 --- println("=== 用Kotlin split解析的镜像列表 ===") val imagesViaSplit = output.split("\n").filter { it.isNotBlank() } // 过滤空行 imagesViaSplit.forEachIndexed { index, image -> println("${index + 1}. $image") } // --- 方式2:使用Java StringTokenizer(匹配你提到的需求)--- println("\n=== 用StringTokenizer解析的镜像列表 ===") val tokenizer = StringTokenizer(output, "\n") var count = 1 while (tokenizer.hasMoreTokens()) { val image = tokenizer.nextToken().trim() if (image.isNotBlank()) { println("${count++}. $image") } } }
脚本细节说明
- 执行外部命令:用
ProcessBuilder构建kubectl命令,比直接调用Runtime.exec更可控,还能把错误输出重定向到控制台,方便你排查命令本身的问题(比如kubectl配置错误)。 - 读取输出:通过
process.inputStream读取命令的标准输出,转换成字符串后再处理。 - 解析输出:
- Kotlin原生的
split("\n")是最直观的方式,配合filter去掉空行,就能直接得到镜像名称的列表,代码简洁易读。 - 如果你一定要用类似Java
StringTokenizer的工具,直接导入Java的java.util.StringTokenizer即可——Kotlin完全兼容Java类库,用法和Java几乎一致。
- Kotlin原生的
- 错误处理:检查命令的退出码,如果非0说明执行失败,直接打印提示信息终止脚本。
运行脚本
把脚本保存为kubectlImages.kts,然后用以下命令运行:
kotlinc -script .\kubectlImages.kts
你会看到两种解析方式输出的镜像列表,都是从kubectl命令结果中提取的有效内容。
内容的提问来源于stack exchange,提问作者Richie
相关产品推荐
相关产品推荐

