Kubernetes上的Python容器中的进度栏​​未更新

时间:2019-03-08 21:20:04

标签: python docker logging kubernetes

我试图在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()

1 个答案:

答案 0 :(得分:3)

登录时,通常不需要登录以\n结尾的完整行,而不是向人类显示TTY中的内容。我通常会建议打印而不是进度条,而不是打印10%...\n20%...\n etc。由您决定打印当前状态的频率。

更新

您可以更新脚本以检测终端是否为TTY,并相应地更改行为

使用此:

import os, sys
if os.isatty(sys.stdout.fileno()):