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

如何用Python对齐Linux中kubectl命令的输出结果

解决多行输出每行添加图标并对齐的问题

这个问题的核心在于你拿到的output是一个多行字符串,直接把图标拼在开头的话,只有第一行前面会有图标,后面的行还是原样,自然就不对齐了。我们需要把每行单独处理,给每一行都加上图标,再重新组合起来。

下面是两种可行的解决方案,你可以根据自己的需求选择:

方案1:用Python直接筛选(替代awk,更灵活)

与其在bash里用awk筛选,不如把所有输出拿到Python里处理,这样能更精细地控制格式:

import subprocess

# 执行kubectl命令,获取所有pod信息
kubectl_cmd = ["kubectl", "get", "pods", "-n", "kube-system"]
result = subprocess.run(kubectl_cmd, capture_output=True, text=True)

# 拆分输出为每行,筛选出状态为Completed的pod名称
completed_pods = []
for line in result.stdout.splitlines():
    # 跳过表头和空行
    if not line or "NAME" in line:
        continue
    parts = line.split()
    if len(parts) >= 4 and parts[3] == "Completed":
        completed_pods.append(parts[0])

# 给每个pod名称前添加图标,重新组合成多行字符串
formatted_output = "\n".join([f"{constant.ICON} {pod}" for pod in completed_pods])

# 输出最终结果
print(f"here is the output:\n{formatted_output}")

方案2:处理原有awk输出的字符串

如果你还是想保留原来的bash命令+awk的组合,只需要把拿到的output拆分成每行,逐个添加图标即可:

# 假设你已经通过subprocess拿到了awk处理后的output
# 先拆分输出为行列表,过滤掉空行
lines = [line.strip() for line in output.splitlines() if line.strip()]

# 给每行添加图标
formatted_lines = [f"{constant.ICON} {line}" for line in lines]

# 重新组合成带图标的多行字符串
formatted_output = "\n".join(formatted_lines)

# 输出时注意换行,让列表单独占一行开始
print(f"here is the output:\n{formatted_output}")

为什么原来的方法不对?

举个例子,假设你的output是:

pod-1-completed
pod-2-completed
pod-3-completed

直接拼接constant.ICON + output会得到:

✅ pod-1-completed
pod-2-completed
pod-3-completed

只有第一行有图标,后面的行没有,自然看起来不对齐。而拆分每行逐个添加图标后,每一行前面都会有图标,就能保持整齐的格式了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:07:00