Python logging 進度條

利用 Python logging 模組的特性,可以在訊息裡頭做出動態進度條。

很簡單、很簡單。

首先我們知道 Python 一開始跑個 import logging; logging.basicConfig(format= …) 會發生什麼事,它會自動建立一個 root Logger ,這個 Logger 裏頭有一個 StreamHandler ,所有一開始可以印在畫面上的訊息,都經過它。

而這個預設的 StreamHandler ,你能以下列手段來取得:

# 記住,只能在 root Logger 裡找這個 handler 。
# 不要傻傻地去找任何一個模組的 Logger 裡頭的 handlers ,那些是空的。
handler = logging.getLogger().handlers[0]

然後做二個動作:

# 第一、讓訊息不是以 ‘\n’ 結尾:
handler.terminator = "
# 第二、讓訊息格式變得單純:
handler.setFormatter(logging.Formatter(‘%(message)s’))

接下來,在程式環境裡可以印進度條:例如,

def pbar(n, m):
    n1 = int(n / m * 10)
    m1 = 9 - n1
    if n1 <= 0:
        bar = '\r[>---------] {}'
    elif m1 <= 0:
        bar = '\r[=========>] {}'
    else:
        bar = '\r[{}>{}] {{}}'.format('=' * n1, '-' * m1)
    bar = bar.format('{:.2f} / {:.2f} KBs ({:.1f}%)'.format(n / 1024, m / 1024, n / m * 100))
    logging.info(bar)

pbar(3205, 5000)
pbar(3300, 5000)
pbar(3450, 5000)

 

廣告

About 黃耀賢 (Yau-Hsien Huang)

熱愛 Erlang ,並且有相關工作經驗。喜歡程式語言。喜歡邏輯。目前用 Python 工作。
本篇發表於 Uncategorized。將永久鏈結加入書籤。