我想运行一个脚本,它基本上显示如下输出:
Installing XXX... [DONE]
目前,我打印安装XXX…首先,然后打印[完成]。
我怎么能打印安装xxx…和[DONE]在同一行?
关于在同一行上写入新消息,替换之前的内容的具体问题,请参见如何将先前的打印内容覆盖到标准输出?。这里的大多数答案都把这个问题理解为在当前行的末尾写新的文本。
有关使用单个打印一次输出多个内容的问题,请参见如何在同一行上一次性打印多个内容(固定文本和/或变量值)。
我想运行一个脚本,它基本上显示如下输出:
Installing XXX... [DONE]
目前,我打印安装XXX…首先,然后打印[完成]。
我怎么能打印安装xxx…和[DONE]在同一行?
关于在同一行上写入新消息,替换之前的内容的具体问题,请参见如何将先前的打印内容覆盖到标准输出?。这里的大多数答案都把这个问题理解为在当前行的末尾写新的文本。
有关使用单个打印一次输出多个内容的问题,请参见如何在同一行上一次性打印多个内容(固定文本和/或变量值)。
当前回答
下面是@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
这两种方法都经过了测试,并且有效。
其他回答
这个简单的例子将在同一行打印1-10个字符。
for i in range(1,11):
print (i, end=" ")
Print()有一个内置参数“end”,默认设置为“\n” 调用print("This is America")实际上是在调用print("This is America", end = "\n")。 一个简单的方法是调用print("This is America", end ="")
在Quora上找到了这个帖子,上面的例子对我很有用(python 3), 这更接近于我需要它(即擦除整个前一行)。
他们提供的例子是:
def clock():
while True:
print(datetime.now().strftime("%H:%M:%S"), end="\r")
如果要在同一行打印,就像其他人建议的那样,只需使用end=""
您应该使用退格'\r'或('\x08')字符返回控制台输出中的先前位置
Python 2 +:
import time
import sys
def backspace(n):
sys.stdout.write((b'\x08' * n).decode()) # use \x08 char to go back
for i in range(101): # for 0 to 100
s = str(i) + '%' # string for output
sys.stdout.write(s) # just print
sys.stdout.flush() # needed for flush when using \x08
backspace(len(s)) # back n chars
time.sleep(0.2) # sleep for 200ms
Python 3:
import time
def backline():
print('\r', end='') # use '\r' to go back
for i in range(101): # for 0 to 100
s = str(i) + '%' # string for output
print(s, end='') # just print and flush
backline() # back to the beginning of line
time.sleep(0.2) # sleep for 200ms
这段代码将在一行中从0%计算到100%。最终值为:
> python test.py
100%
关于这种情况下flush的其他信息:为什么python打印包含'end='参数的语句在while循环中表现不同?
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]"