【发布时间】:2019-03-08 21:20:03
【问题描述】:
我正在尝试在 Kubernetes 上的 Python 容器中创建一个简单的进度条。但是,在工作完成并且进度条达到 100% 之前,它不会输出任何内容。完全相同的代码在本地 Docker 容器中完美运行。那么 Kubernetes 有什么地方会阻止我在其日志中看到实时更新的进度条呢?
进度条码:
import sys
import time
class Color:
BOLD = '\033[1m'
ENDC = '\033[0m'
ERASE_LINE = '\x1b[2K\r'
def percentage(current, total):
percent = 100 * float(current) / float(total)
return percent
class ProgressBar:
def __init__(self, total):
self._total = total
self._current = 0
self.print()
def update(self):
self._current += 1
self.print()
def print(self):
percent = percentage(self._current, self._total)
sys.stdout.write("\r")
sys.stdout.write(Color.BOLD + "[%-50s] %d%%" % ('=' * int(percent / 2), percent) + Color.ENDC)
sys.stdout.flush()
if __name__=="__main__":
print("Ready to run soon...")
time.sleep(10)
print("Running!")
pbar = ProgressBar(255)
for i in range(255):
time.sleep(0.03)
pbar.update()
【问题讨论】:
-
您从哪里观察输出,本地/远程终端会话?是本地 minikube 吗?
-
通过远程终端会话。我通过 SSH 进入 k8s 集群,然后在 pod 上运行
logs -f。 -
啊,那会是个问题。日志拖尾将在打印一行之前等待
\n- 据我所知,您的脚本正在一遍又一遍地重写同一行。我猜脚本或容器的终止会发送一个 EOF 或只是刷新缓冲区并添加一个\n -
有道理,我没想到。感谢您的洞察力。您对我如何解决这个问题有什么想法吗?
标签: python docker logging kubernetes