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

Installing XXX...               [DONE]

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

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


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

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


当前回答

你可以简单地使用这个:

print 'something',
...
print ' else',

输出将是

something else

不需要过多的导入系统。注意结尾的逗号符号。

Python 3 + Print ("some string", end="");删除末尾的换行插入。阅读更多帮助(打印);

其他回答

没有一个答案对我有用,因为它们都暂停了,直到遇到新的一行。我写了一个简单的helper:

def print_no_newline(string):
    import sys
    sys.stdout.write(string)
    sys.stdout.flush()

要测试它:

import time
print_no_newline('hello ')
# Simulate a long task
time.sleep(2)
print('world')

“hello”将首先打印出来,并在睡眠前刷新到屏幕上。之后你就可以使用标准打印了。

这个简单的例子将在同一行打印1-10个字符。

for i in range(1,11):
    print (i, end=" ")

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

他们提供的例子是:

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

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

Sys.stdout.write将输出没有返回符

import sys
sys.stdout.write("installing xxx")
sys.stdout.write(".")

http://en.wikibooks.org/wiki/Python_Programming/Input_and_output#printing_without_commas_or_newlines

我找到了这个解决方案,它在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