You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python回车符\r部分场景失效:单行进度条退场时异常换行问题

问题原因

两个核心因素导致换行异常:

  1. 写死的128字符进度条长度超过终端默认行宽,当输出字符长度等于/超过终端行宽时,终端会自动插入换行符,此时\r只能作用于新生成的行,无法回到上一行行首覆盖内容,因此每次迭代都会输出到新行。
  2. 部分终端环境下print默认的行缓冲机制会导致输出内容累积后才刷新,也可能触发异常换行。

修正代码

import time
import os

# 自动获取当前终端行宽,减1避免满行触发自动换行
BAR_WIDTH = os.get_terminal_size().columns - 1

s = 1
f = 1
while True:
    # 入场:进度条延伸占满整行
    while s <= BAR_WIDTH:
        loadbar = '█' * s
        print(loadbar, end='\r', flush=True)
        time.sleep(0.01)
        s += 1
    # 退场:整体从左侧移出屏幕
    while f <= BAR_WIDTH:
        # 左移消失逻辑:去掉左侧第一个字符,右侧补空格
        loadbar = loadbar[1:] + ' '
        # 如需右移消失,替换为以下逻辑即可
        # loadbar = ' ' + loadbar[:-1]
        print(loadbar, end='\r', flush=True)
        time.sleep(0.01)
        f += 1
    s = 1
    f = 1

关键修改说明

  • 采用os.get_terminal_size()自动适配当前终端宽度,避免写死长度超出终端行宽触发自动换行。
  • 给print新增flush=True参数,强制每次输出立刻刷新缓冲,保证\r即时生效。
  • 可根据需求选择退场的移动方向,只要保证单次输出总长度不超过终端行宽,就不会出现异常换行。

内容的提问来源于stack exchange,提问作者Xpired

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:45:03