【问题标题】:Python: Printing in the same exact spot using \r not working?Python:使用 \r 在同一位置打印不起作用?
【发布时间】:2014-07-24 23:45:30
【问题描述】:

我正在尝试在完全相同的位置打印:

for i in range(10):
    print("ok\r"),

但是,这会在不同的行中打印 10 个 ok:

ok
ok
...

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

[blank]
ok
ok
...

我也尝试了以下

import sys

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

但我得到了同样的结果。我在 pyscripter 中使用 Python 2.7,我做错了什么?我也试过IDLE,'okokokokokokokokokokok'是\r在最后的结果,'ok ok ok ok ok ok ok ok ok ok'是在前面的结果。

编辑:我在 Windows 7 上

非常感谢任何帮助!

【问题讨论】:

  • pyscripter 可能对控制台输出做了一些花哨的事情并且不尊重\r 或者你在出错的窗口上
  • 你的意思可能是\b而不是\r;如果是这种情况,您应该这样做, end=''
  • @PadraicCunningham print 函数被反向移植到 py2.7:from __future__ import print_function,所以你仍然可以使用 , end=''
  • 我在windows上,这是否意味着\r和\b不起作用?
  • @JakobBowyer 我在 IDLE 上遇到了同样的问题,@PadraicCunningham 我尝试从__future__ 导入,然后使用print('ok\r',end=''),但仍然连续获得 10 次成功。

标签: python printing


【解决方案1】:

试试下面的代码,它可以在 ubuntu 上运行,我添加了一个 time.sleep 调用,这样你就可以看到实际发生了什么:

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

【讨论】:

  • 重要:除非您在文件顶部添加:from __future__ import print_function(除非您使用的是 Python3,否则它不会起作用)
【解决方案2】:

对于 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

【讨论】:

  • 感谢您的帖子。我得到以下信息:i.imgur.com/0PwxImb.png(一堆ok,中间有一个奇怪的符号)
  • 我在上图中使用print "ok\b" * 10也得到了同样的结果
  • @casandra 您可以使用空格或\t - 如果我正确理解您的要求。您可以发布请求的输出吗?
  • 所需的输出将是一个“好的”,因为我只想在同一个确切的位置打印。 (我这样做是为了创建一个进度条,显示脚本的完成百分比)。
  • 如果您尝试在 REPL 中执行此操作,它将无法正常工作。 stackoverflow.com/questions/24945813/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
相关资源
最近更新 更多