簡體   English   中英

帶有 Docker 日志的 tqdm 進度條

[英]tqdm progress bar with Docker logs

我正在使用tqdm為我的 Python 控制台應用程序顯示各種進度條。 對於應用程序的生產部署,我使用 Docker。

在終端中運行 Python 應用程序時,進度條工作正常。 但是,當 Dockerized 和終端 output 通過docker logs訪問時,進度條不會 function 因為據我了解它不是交互式終端。 雖然看起來如果docker logs在進度條完成后轉儲,則進度會呈現,但不確定是否還有其他條件會發生這種情況(輸出緩沖?)。

我想修改我的tqdm行為,以便

  • 它檢測何時在非交互式 Dockerised 環境中運行
  • 它不會顯示交互式進度條,而是定期記錄完成語句(完成 10%,X 次迭代/秒)

這樣,在生產中運行應用程序時,進度持續時間等將更容易訪問。

將這種自定義行為附加到tqdm的方法是什么?

您可以根據沒有 TERM 環境變量來識別您的進程是否在非交互式 docker 環境中運行。

# interactive environment
$ docker run --rm -it centos:7 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=8c810e490671
TERM=xterm
HOME=/root

# non-interactive environment
$ docker run --rm  centos:7 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=e267f2ba0f8f
HOME=/root

在您的腳本中考慮這一事實,如果是非交互式環境,請使用 tqdm 的total參數或disable它:

總計:int 或 float,可選

預期的迭代次數。 如果未指定,則盡可能使用 len(iterable)。 如果 float("inf") 或作為最后的手段,則僅顯示基本進度統計信息(無 ETA,無進度條)。 如果 gui 為 True 並且此參數需要后續更新,請指定一個初始的任意大正數,例如 9e9。

禁用:布爾,可選

是否禁用整個進度條包裝器 [默認值:False]。 如果設置為無,則在非 TTY 上禁用。

https://github.com/tqdm/tqdm/#parameters

更新:

看起來非交互式環境中的 TERM 環境變量的值為“啞”

docker run --rm  centos:7 bash -c 'echo "${TERM}"'
dumb

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM