繁体   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