使用pdsh时tqdm进度条无法正常更新的解决方法咨询
解决pdsh执行tqdm进度条不更新的问题
问题原因
pdsh远程执行命令时会重定向进程输出,导致tqdm无法检测到交互式终端(TTY),默认自动禁用动态进度条,改为逐行输出,表现为进度条"不更新"。
解决方案
通过强制tqdm启用动态进度条,并指定输出流为stderr,即可解决该问题:
修改后的代码如下:
# tq_test.py from tqdm.auto import tqdm import time import sys if __name__ == "__main__": # 强制启用进度条,输出到stderr bar = tqdm(total=5, disable=False, file=sys.stderr) for _ in tqdm(range(3), disable=False, file=sys.stderr): time.sleep(0.5) for _ in range(5): bar.update(1) bar.close() # 确保进度条正常收尾
参数说明
disable=False:忽略tqdm对终端交互性的检测,强制启用动态进度条file=sys.stderr:将进度条输出到标准错误流,避免与标准输出混叠,pdsh对stderr的处理更适配实时输出bar.close():显式关闭进度条,确保输出格式完整
备选方案(依赖pdsh配置)
如果环境支持,可在pdsh命令中添加-t参数强制分配TTY,让远程进程获得交互式终端环境:
pdsh -t -S -f 1024 -w mymachine /home/user/miniconda3/bin/python -u /home/user/python/tq_test.py
该方案无需修改代码,但兼容性不如修改tqdm参数的方法广泛。
内容的提问来源于stack exchange,提问作者roger
相关产品推荐
相关产品推荐

