如何在Python中将光标重置为同一行的开头

2024-09-28 23:23:21 发布

您现在位置:Python中文网/ 问答频道 /正文

与本主题相关的大多数问题如下:

How to print some information on the same line without introducing a new line

Q1Q2

相反,我的问题是:

我希望看到以下效果

>> You have finished 10%

其中10同时增加。我知道如何在C++中做这件事,但是不能 在python中找到一个好的解决方案。


Tags: theto主题newinformationonlinesome
3条回答

Python3

您可以使用关键字参数来print

print('string', end='\r', flush=True)

  • end='\r''\r'替换默认的行尾行为
  • flush=True刷新缓冲区,使打印文本立即显示。

Python2

在2.6+中,可以在脚本的开头使用^{}来启用Python 3行为。或者用老办法:

Python的print在每个命令后面都放一个换行符,除非用一个尾随逗号来抑制它。因此,print命令是:

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

注意末尾的逗号。

不幸的是,Python只在完成一行之后将输出发送到终端。以上不是完整的行,因此需要手动flush

import sys
sys.stdout.flush()

在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的Benfit可以像图形程序一样在终端上绘制,因为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()
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()将缓冲区刷新到stdout。

对于Python3,可以使用:

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

相关问题 更多 >