发布于 2011-10-11 00:13:13
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='')
发布于 2011-10-11 00:15:02
Python 3
您可以将关键字参数用于print
print('string', end='\r', flush=True)
end='\r'
将默认的行尾行为替换为'\r'
flush=True
刷新缓冲区,使打印的文本立即显示。Python 2
在2.6+中,您可以在脚本开头使用from __future__ import print_function
来启用Python3行为。或者使用老方法:
Python的print
会在每个命令后加上一个换行符,除非您在命令后面加上一个逗号。因此,打印命令是:
print 'You have finished {0}%\r'.format(percentage),
注意末尾的逗号。
不幸的是,Python只在一个完整的行后将输出发送到终端。以上不是完整的一行,您需要手动对其执行flush
:
import sys
sys.stdout.flush()
发布于 2011-10-11 00:25:20
在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()
https://stackoverflow.com/questions/7715594
复制相似问题