You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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")
        }
    }
}

脚本细节说明

  1. 执行外部命令:用ProcessBuilder构建kubectl命令,比直接调用Runtime.exec更可控,还能把错误输出重定向到控制台,方便你排查命令本身的问题(比如kubectl配置错误)。
  2. 读取输出:通过process.inputStream读取命令的标准输出,转换成字符串后再处理。
  3. 解析输出:
    • Kotlin原生的split("\n")是最直观的方式,配合filter去掉空行,就能直接得到镜像名称的列表,代码简洁易读。
    • 如果你一定要用类似Java StringTokenizer的工具,直接导入Java的java.util.StringTokenizer即可——Kotlin完全兼容Java类库,用法和Java几乎一致。
  4. 错误处理:检查命令的退出码,如果非0说明执行失败,直接打印提示信息终止脚本。

运行脚本

把脚本保存为kubectlImages.kts,然后用以下命令运行:

kotlinc -script .\kubectlImages.kts

你会看到两种解析方式输出的镜像列表,都是从kubectl命令结果中提取的有效内容。

内容的提问来源于stack exchange,提问作者Richie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 02:57:33