[英]tqdm progress bar with Docker logs
我正在使用tqdm为我的 Python 控制台应用程序显示各种进度条。 对于应用程序的生产部署,我使用 Docker。
在终端中运行 Python 应用程序时,进度条工作正常。 但是,当 Dockerized 和终端 output 通过docker logs
访问时,进度条不会 function 因为据我了解它不是交互式终端。 虽然看起来如果docker logs
在进度条完成后转储,则进度会呈现,但不确定是否还有其他条件会发生这种情况(输出缓冲?)。
我想修改我的tqdm
行为,以便
这样,在生产中运行应用程序时,进度持续时间等将更容易访问。
将这种自定义行为附加到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.