如何使用 \r 让Python在同一行打印?
有人能详细解释一下在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)