Python:使用\r在同一位置打印不起作用?

6
我正在尝试在完全相同的位置打印:
for i in range(10):
    print("ok\r"),

然而,这会在不同的行中打印10个"ok":
ok
ok
...

我尝试将\r放在字符串前面。在这种情况下,我会得到一个空行,然后是10个ok:

[blank]
ok
ok
...

我也尝试了以下方法。
import sys

for i in range(10):
    sys.stdout.write('ok\r')
    sys.stdout.flush()

但我得到了完全相同的结果。我在Python 2.7中使用pyscripter,我做错了什么?我还尝试了IDLE,在那里\r在末尾时结果为“okokokokokokokokokok”,当它在前面时结果为“ok ok ok ok ok ok ok ok ok ok”。
编辑:我在Windows 7上。
非常感谢您的帮助!

pyscripter可能对控制台输出进行了一些高级处理,没有遵守\r的规则,或者你正在使用Windows系统,导致出现错误。 - Jakob Bowyer
1
可能你想要的是 \b 而不是 \r;如果是这样的话,你应该做 , end='' - behzad.nouri
@PadraicCunningham print函数已经被回溯到py2.7:from __future__ import print_function,因此您仍然可以使用, end='' - behzad.nouri
我在使用Windows系统,这是否意味着\r和\b无法使用? - casandra
@JakobBowyer 我在IDLE上也遇到了同样的问题,@PadraicCunningham 我尝试从__future__导入,然后使用print('ok\r',end=''),但仍然连续得到10个“ok”。 - casandra
我确定IDLE不支持光标移动序列(如\r\b)。我不知道pyscripter是否支持。你在CMD窗口中尝试过在普通的Python shell中运行代码吗? - Robᵩ
2个回答

6

请尝试以下代码,它在ubuntu上可行。我添加了一个time.sleep调用以便您可以看到实际发生的情况:

import time
for i in range(10):
    print(str(i),end='\r')
    time.sleep(.4)

重要提示:除非您在文件顶部添加“from future import print_function”(如果您使用的是Python3则无需添加),否则它将无法正常工作。 - Nir Alfasi

0

对于Python 2

from __future__ import print_function
import time
import sys

for i in range(10):
    print('ok', end="\r")
    sys.stdout.flush()
    time.sleep(1)

根据我之前写的gist

对于python 3,不需要以下这行代码:

from __future__ import print_function

感谢您的帖子。我看到了以下内容:http://i.imgur.com/0PwxImb.png(一堆“OK”之间有一个奇怪的符号)。 - casandra
我也用print "ok\b" * 10得到了上面图片中的相同结果。 - casandra
期望的输出将只有一个“ok”,因为我只想在完全相同的位置打印。 (我正在做这个来创建一个进度条,显示脚本完成的百分比)。 - casandra
@BSpiros 所以它只能在命令行中工作吗?另外,你的链接链接到这个问题。 - casandra
抱歉,链接我会修复。我的理解是在交互式解释器中 \r 无法工作。 - BWStearns
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接