如何使用 \r 让Python在同一行打印?

0 投票
4 回答
5320 浏览
提问于 2025-04-17 23:19

有人能详细解释一下在Python中'\r'是怎么回事吗?为什么下面的代码在屏幕上什么都不打印出来呢?

#!/usr/bin/python

from time import sleep

for x in range(10000):
    print "%d\r" % x,
    sleep(1)

4 个回答

0

这和 \r 没有关系。问题出在你 print 语句末尾的那个 ,。它试图打印这一行的最后一个值,而这个 , 导致了一个空的元组。去掉那个 ,,它就能正常工作了。

编辑:

我不确定说它在创建一个元组是否完全正确,但无论如何,这就是你问题的根源。

1

'\r' 只是一个 ASCII 码字符。根据定义,它代表的是 CR,也就是回车。具体怎么理解这个字符,取决于你使用的终端或控制台。Windows 和 DOS 系统通常期望每一行以 CR/LF(也就是 '\r\n')结束,而 Linux 系统一般只用 LF(即 '\n'),经典的 Mac 系统则只用 CR(也就是 '\r');不过即使在这些系统上,你通常也可以告诉你的终端模拟器怎么理解 CR 和 LF 这两个字符。

从历史上看(就像打字机的工作原理),LF 会把光标移动到下一行,而 CR 则是把光标移回到第一列。

至于为什么什么都没有打印出来:把你打印语句末尾的逗号去掉。

1

你可以这样做:

print "\r%d" % x,
2

你的输出内容被缓存了,所以不会立刻显示出来。当它显示出来时,可能会被命令行或解释器的提示符覆盖掉。

解决这个问题的方法是,每次打印的时候都要刷新一下:

#!/usr/bin/python

from time import sleep
import sys

for x in range(10000):
    print "%d\r" % x,
    sys.stdout.flush()
    sleep(1)

撰写回答