Mik*_*maa 4 python docker tqdm
我正在使用tqdm显示 Python 控制台应用程序的各种进度条。对于应用程序的生产部署,我使用 Docker。
在终端中运行 Python 应用程序时,进度条工作正常。但是,当 Dockerized 并通过进度条访问终端输出时,docker logs它不起作用,因为据我了解,它不是交互式终端。虽然看起来如果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
Run Code Online (Sandbox Code Playgroud)
在您的脚本中考虑这一事实,并且在非交互式环境的情况下使用totaltqdm 或其参数disable:
总计:int 或 float,可选
预期的迭代次数。如果未指定,则尽可能使用 len(iterable)。如果 float("inf") 或作为最后的手段,则仅显示基本进度统计信息(无预计到达时间,无进度条)。如果 gui 为 True 并且该参数需要后续更新,请指定一个初始任意大正数,例如 9e9。
禁用:布尔值,可选
是否禁用整个进度条包装器[默认值:False]。如果设置为“无”,则在非 TTY 上禁用。
https://github.com/tqdm/tqdm/#parameters
更新:
看起来非交互式环境中的 TERM env 变量的值为“dumb”
docker run --rm centos:7 bash -c 'echo "${TERM}"'
dumb
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2008 次 |
| 最近记录: |