我试图通过在同一行上每秒打印一个点来创建类似进度的东西。像“钓鱼......”之类的东西。这是我用过的:
import time
print('Fishing', end='')
for i in range(5):
time.sleep(1)
print('.', end='')
但等待5秒钟并同时打印Fishing.....
。但是当我不使用end=''
时,它会每秒打印一次点,但是会在不同的行上打印
Fishing.
.
.
.
.
print
会这样做?答案 0 :(得分:6)
print
会这样做?这与您的终端print
及更多内容关系不大。出于性能原因,文本只会被刷新"每次有换行符,而不是一次只有一个字符。
通过"冲洗"每次打印时手动标准输出:
import time
import sys
print('Fishing', end='')
sys.stdout.flush()
for i in range(5):
time.sleep(1)
print('.', end='', flush=True) # another way
如果您一直需要这个,您可以定义一个单独的冲洗打印功能:
from functools import partial
myprint = partial(print, end='', flush=True)
myprint('Fishing')
for i in range(5):
time.sleep(1)
myprint('.')
答案 1 :(得分:2)
这是因为file.flush()
被认为是昂贵的操作:它通常会等到它必须打印大量数据,或者直到遇到新行(通常只有如果输出写入终端):
输出缓冲由文件决定。例如,使用
background-position: right center;
确保在屏幕上立即显示。
显然,它需要几分钟的代价并不昂贵:但是要求终端操作员打印新内容,或者操作系统将数据写入文件(在I / O重定向的情况下)仍然不是&# 34;快速闪电"。
您可以使用flush
on the standard output channel强制打印仍在队列中的所有数据。
答案 2 :(得分:1)
使用
print('.', end="", flush=True)