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

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”将首先打印出来,并在睡眠前刷新到屏幕上。之后你就可以使用标准打印了。

你可以简单地使用这个:

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

输出将是

something else

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

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

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

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

如果你预先将值存储在数组中,你可以用下面的格式调用它们:

for i in range(0,n):
       print arr[i],

如果你想覆盖前一行(而不是不断地添加),你可以在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%"),