首页 > 解决方案 > 在同一行写入输出,在 python 控制台上完全清除前一行

问题描述

此代码演示进度并Done...在同一控制台行打印并退出程序

import time

filename = 'file-name.txt'

for i in range(0, 101):
    time.sleep(0.1)
    print('Downloading File %s [%d%%]\r'% (filename, i), end="", flush=True)

print('Done...\r\n', end="", flush=True)

问题是当程序结束时,它在最后一行的末尾有前一行的残余。下面的输出演示了程序运行时的单行更新。

电流输出(单线更新)

Downloading File file-name.txt [1%]
.
.
Downloading File file-name.txt [100%]
Done...ding File file-name.txt [100%]

预期输出(单行更新)

Downloading File file-name.txt [1%]
.
.
Downloading File file-name.txt [100%]
Done...

在这里发现了同样的问题,但它并没有解决这个问题。如果没有前一行的残余,我怎样才能实现预期输出。我想添加不是很pythonic'\b\b\b\b\b\b\b\b\b\b'

标签: python-3.xconsolecommand-line-interfacestdoutpython-curses

解决方案


这个不可打印的字符\x1b[2K擦除当前行并修复了问题。

import time

filename = 'file-name.txt'

for i in range(0, 101):
    time.sleep(0.1)
    print('Downloading File %s [%d%%]\r'% (filename, i), end="", flush=True)

print('\x1b[2K', end="")
print('Done...\r\n', end="", flush=True)

推荐阅读