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

18 浏览
0 Comments

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

大部分与此主题相关的问题在SO上如下:\n“如何在不换行的情况下打印一些信息?”\nQ1 Q2。\n然而,我的问题如下:\n我希望看到以下效果:\n

>> 完成了10%

\n其中的10会不断增加。我知道如何在C++中实现这一点,但在python中找不到一个好的解决方案。

0
0 Comments

在Linux(可能也适用于Windows)上,您可以使用curses模块来将光标重置到同一行的开头。curses模块可以让您在终端上像图形程序一样绘制,因为它提供了移动到任意x,y位置的功能。

以下是一个简单的脚本示例,使用curses模块更新四个视图。脚本会在终端上显示一个进度条,每个视图都显示不同的进度。

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()

然而,这里给出的链接已经失效了。

0
0 Comments

如何将光标重置到同一行的开头(How to reset cursor to the beginning of the same line in Python)

在Python 3中,可以使用关键字参数来控制打印输出的行为。通过设置end='\r',可以将默认的换行行为替换为回车符'\r'。同时,设置flush=True可以立即刷新输出缓冲区,使打印的文本立即显示在终端上。

在Python 2中,可以使用from __future__ import print_function来启用Python 3的行为。或者可以按照旧的方式处理。Python 2的print命令在每个命令后面都会添加一个换行符,除非通过在末尾添加逗号来禁止。所以,正确的打印命令应该是print 'You have finished {0}%\r'.format(percentage),。需要注意的是,末尾的逗号不能省略。

不幸的是,Python只在打印输出完成一整行后才将输出发送到终端。由于上述的打印命令不是一整行,因此需要手动调用sys.stdout.flush()来刷新输出缓冲区。

有没有一种兼容Python 2和3的解决方法呢?可以通过使用__future__导入来实现。通过导入from __future__ import print_function,可以在Python 2中启用Python 3的打印行为。

总结起来,解决方法如下:

在Python 3中,使用print('string', end='\r', flush=True)来重置光标到同一行的开头。

在Python 2中,可以通过使用from __future__ import print_function来启用Python 3的行为,或者使用print 'You have finished {0}%\r'.format(percentage),来打印同一行的文本。同时,需要手动调用sys.stdout.flush()来刷新输出缓冲区。

如果需要兼容Python 2和3,可以使用from __future__ import print_function来启用Python 3的行为。这样就可以在两个版本中使用相同的打印命令,并通过手动调用sys.stdout.flush()来刷新输出缓冲区。

0
0 Comments

文章标题:Python中如何将光标重置到同一行的开头?

在Python中,有时候我们需要将光标重置到同一行的开头,以便实现一些特定的输出效果。下面是一个例子:

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='')

在这个例子中,我们使用了`format`函数来格式化输出,并使用`end=''`来避免自动换行。

另外,在较新的Python 3版本中,我们还可以使用更现代的语法:

print(f"\r>> You have finished {i}%", end='', flush=True)

这个例子中,我们使用了f-string来格式化输出,并使用`end=''`来避免自动换行。此外,我们还设置了`flush=True`来立即刷新输出缓冲区。

通过上述方法,我们可以在Python中将光标重置到同一行的开头,以实现特定的输出效果。

0