如何用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
相关产品推荐
相关产品推荐

