我想运行一个脚本,它基本上显示如下输出:

Installing XXX...               [DONE]

目前,我打印安装XXX…首先,然后打印[完成]。

我怎么能打印安装xxx…和[DONE]在同一行?


关于在同一行上写入新消息,替换之前的内容的具体问题,请参见如何将先前的打印内容覆盖到标准输出?。这里的大多数答案都把这个问题理解为在当前行的末尾写新的文本。

有关使用单个打印一次输出多个内容的问题,请参见如何在同一行上一次性打印多个内容(固定文本和/或变量值)。


当前回答

最简单的:

Python 3

    print('\r' + 'something to be override', end='')

这意味着它将把光标返回到开头,然后打印内容并在同一行中结束。如果在循环中,它将在开始时的相同位置开始打印。

其他回答

在Quora上找到了这个帖子,上面的例子对我很有用(python 3), 这更接近于我需要它(即擦除整个前一行)。

他们提供的例子是:

def clock():
   while True:
       print(datetime.now().strftime("%H:%M:%S"), end="\r")

如果要在同一行打印,就像其他人建议的那样,只需使用end=""

使用sys.stdout。写(“安装XXX……')和sys.stdout.write('Done')。通过这种方式,如果您想重新创建打印功能,就必须手动添加“\n”新行。我认为没有必要为此使用诅咒。

如果你想覆盖前一行(而不是不断地添加),你可以在print语句的末尾将\r与print()结合使用。例如,

from time import sleep

for i in xrange(0, 10):
    print("\r{0}".format(i)),
    sleep(.5)

print("...DONE!")

将计数0到9,取代控制台中旧的数字。“…DONE!”将与最后一个计数器9打印在同一行。

在OP的情况下,这将允许控制台以“进度条”的形式显示安装完成百分比,您可以在其中定义开始和结束字符的位置,并在两者之间更新标记。

print("Installing |XXXXXX              | 30%"),

Print()有一个内置参数“end”,默认设置为“\n” 调用print("This is America")实际上是在调用print("This is America", end = "\n")。 一个简单的方法是调用print("This is America", end ="")

我找到了这个解决方案,它在Python 2.7上运行

# Working on Python 2.7 Linux

import time
import sys


def backspace(n):
    print('\r', end='')                     # use '\r' to go back


for i in range(101):                        # for 0 to 100
    s = str(i) + '%'                        # string for output
    sys.stdout.write(string)
    backspace(len(s))                       # back for n chars
    sys.stdout.flush()
    time.sleep(0.2)                         # sleep for 200ms