如何在Python中将光标重置到当前行的开头

44 投票
6 回答
72593 浏览
提问于 2025-04-17 04:01

在这个话题上,StackOverflow上大部分的问题都是这样的:

如何在同一行打印一些信息,而不换行?

问题1 问题2

不过,我的问题是:

我希望看到以下效果,

>> You have finished 10%

其中的 10 会不断增加。我知道在C++中怎么做,但在Python中找不到好的解决办法。

6 个回答

6

在Linux(可能在Windows上也可以),你可以像这样使用curses模块。

import time
import curses

win = curses.initscr()
for i in range(100):
    win.clear()
    win.addstr("You have finished %d%%"%i)
    win.refresh()
    time.sleep(.1)
curses.endwin()

使用curses的好处是,它比其他简单的方法更强大,因为你可以像在图形程序中一样在终端上绘图。curses允许你移动到任何的x,y坐标位置。比如,下面是一个简单的脚本,它可以更新四个视图。

import time
import curses

curses.initscr()

rows = 10
cols= 30
winlist = []
for r in range(2):
    for c in range(2):
        win = curses.newwin(rows, cols, r*rows, c*cols)
        win.clear()
        win.border()
        winlist.append(win)

for i in range(100):
    for win in winlist:
        win.addstr(5,5,"You have finished - %d%%"%i)
        win.refresh()
    time.sleep(.05)
curses.endwin()
37

Python 3

你可以用关键字参数来控制 print 的输出方式:

print('字符串', end='\r', flush=True)

  • end='\r' 这个设置会把默认的换行行为替换成 '\r',也就是说它不会换行,而是回到行首。
  • flush=True 这个设置会立即输出内容,让你看到打印的文本,不会等到缓冲区满了才显示。

Python 2

在 2.6 及以上版本中,你可以在脚本开头加上 from __future__ import print_function 来启用 Python 3 的打印方式。或者你也可以用旧的方法:

在 Python 中,print 命令会在每次输出后自动换行,除非你在后面加个逗号来抑制这个行为。所以,打印命令是:

print 'You have finished {0}%\r'.format(percentage),

注意最后的逗号。

不过,Python 只会在一整行输出完成后才把内容发送到终端。上面的内容不是一整行,所以你需要手动 flush 它:

import sys
sys.stdout.flush()
41
import sys, time

for i in xrange(0, 101, 10):
  print '\r>> You have finished %d%%' % i,
  sys.stdout.flush()
  time.sleep(2)
print

\r 是回车符。你在 print 语句的末尾需要加一个逗号,这样才能避免自动换行。最后,sys.stdout.flush() 是用来将缓存中的内容强制输出到标准输出的。

对于 Python 3,你可以使用:

print("\r>> You have finished {}%".format(i), end='')

撰写回答