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

Installing XXX...               [DONE]

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

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


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

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


当前回答

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

其他回答

Python 3解决方案

print()函数接受一个结束参数,默认为\n(新行)。将其设置为空字符串可防止它在行尾发出新行。

def install_xxx():
    print("Installing XXX...      ", end="", flush=True)

install_xxx()
print("[DONE]")

Python 2解决方案

在print()行末尾使用逗号可以防止print()输出新的行(您应该注意,在输出的末尾会有一个额外的空格)。

def install_xxx():
   print "Installing XXX...      ",

install_xxx()
print "[DONE]"

Python 3中的解决方案。X具体:

当我需要这样做的时候,我通常只用

end=' '

例如:

# end='' ends the output with a <space> 
print("Welcome to" , end = ' ') 
print("stackoverflow", end = ' ')

输出如下:

Welcome to stackoverflow

end=中的空格可以替换为任何字符。例如,

print("Welcome to" , end = '...') 
print("stackoverflow", end = '!')

输出如下:

Welcome to...stackoverflow!

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

他们提供的例子是:

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

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

下面是@Vadim-Zin4uk从3.0版本衍生出来的2.7兼容版本:

Python 2

import time

for i in range(101):                        # for 0 to 100
    s = str(i) + '%'                        # string for output
    print '{0}\r'.format(s),                # just print and flush

    time.sleep(0.2)

因此,3.0提供的解决方案看起来有点臃肿。例如,backspace方法不使用整型参数,可以完全取消。

Python 3

import time

for i in range(101):                        # for 0 to 100
    s = str(i) + '%'                        # string for output
    print('{0}\r'.format(s), end='')        # just print and flush

    time.sleep(0.2)                         # sleep for 200ms

这两种方法都经过了测试,并且有效。

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