我想运行一个脚本,它基本上会显示以下输出:
Installing XXX... [DONE]
目前,我先打印 正在安装XXX...
,然后再打印[完成]
。
我该如何在同一行上打印正在安装xxx...
和[完成]
呢?
针对在同一行上写入新消息并替换之前内容的具体问题,请参见如何覆盖先前的stdout打印内容?。大多数答案都将问题解释为在当前行末尾写入新文本。
若要在单个print
语句中输出多个内容,请参见如何同时打印多个文本和/或变量值?。
我想运行一个脚本,它基本上会显示以下输出:
Installing XXX... [DONE]
目前,我先打印 正在安装XXX...
,然后再打印[完成]
。
我该如何在同一行上打印正在安装xxx...
和[完成]
呢?
针对在同一行上写入新消息并替换之前内容的具体问题,请参见如何覆盖先前的stdout打印内容?。大多数答案都将问题解释为在当前行末尾写入新文本。
若要在单个print
语句中输出多个内容,请参见如何同时打印多个文本和/或变量值?。
Python 3 解决方案
print()
函数接受一个end
参数,默认为\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]"
print("...", end="", flush=True)
,在Python 2中添加sys.stdout.flush()
调用即可。 - Martijn Pietersprint("Progress: {}%".format(var), end="\r", flush=True)
。 - John你可以直接使用这个:
print 'something',
...
print ' else',
输出结果将会是:
something else
导入 sys
是不必要的,不要过度使用。注意在末尾使用逗号。
Python 3+ 使用 print("some string", end="");
可以去掉末尾插入的换行符。了解更多请阅读 help(print);
print("string", end="");
- 阅读文档 help(print);
- boldnik你应该使用回退键 '\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的其他信息,请查看此处:Why do python print statements that contain 'end=' arguments behave differently in while-loops?
使用 sys.stdout.write('Installing XXX... ')
和 sys.stdout.write('Done')
。这种方式下,如果想要重新创建打印功能,就必须手动添加换行符"\n"
。我认为可能没有必要仅仅为此目的使用curses。
__future__
导入或类似的内容。 - mgilson print('\r' + 'something to be override', end='')
这意味着将光标返回到开头,然后打印一些内容,并在同一行结束。如果在循环中,它将从相同的位置开始打印。
因为所有的答案都会在遇到新行之前暂停,所以它们都不适用于我。我写了一个简单的帮助器:
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函数。
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在打印输出时会默认添加换行符。在Python3中,可以使用end=' '参数来在print方法输出的末尾添加空格代替换行符;而在Python2中,则需要在print语句的末尾使用逗号。
print('Foo', end=' ')
print('Bar')
这个简单的例子会在同一行上打印1-10。
for i in range(1,11):
print (i, end=" ")
Print函数有一个可选的end
参数,它是在输出结束时打印的内容。
默认情况下,它是一个换行符,但你可以将其更改为空字符串。例如:print("hello world!", end="")
print 'something',
命令。末尾的逗号可以防止换行。 - arjoonn