如何在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='')