我有一个 Python 程序,它广泛使用换行符来产生更新控制台行(特别是进度条)的效果。在尝试调试 PyCharm 中的代码时,我看到进度条在完成之前不会打印出来。
进一步检查后发现,当打印回车符 (\r
) 时,整行都被删除了。因为库本身写入形式为 ({line}\r
) 的字符串,所以我总是得到一个空行。
示例代码:
import sys
sys.stdout.write('xxx')
sys.stdout.flush()
time.sleep(1)
sys.stdout.write('\rZZ')
sys.stdout.flush()
time.sleep(1)
sys.stdout.write('yyy\r')
sys.stdout.flush()
time.sleep(1)
print ('===')
我的运行看起来像这样:
xxx
被打印
[1 秒后]
ZZ
打印
[1 秒后]
- 该行被删除
[1 秒后]
===
被打印,程序终止
运行此脚本时,在调试和运行控制台中都会发生这种情况。
答案实际上在您的帖子中。如您所说,回车会删除整行。为避免此问题,请仅在打印新行时打印回车符,如下所示:
打印每一行,开头有回车符,没有默认的 end='\n'
。不需要冲洗,尽管我没有做太多测试。
print('\rxxx', end='')
# sys.stdout.flush()
time.sleep(1)
继续这样...
print('\rZZ', end='')
time.sleep(1)
print('\ryyy', end='')
time.sleep(1)
要保留最后的打印输出,请保留默认结尾。
print('\r===')
我是一名优秀的程序员,十分优秀!