奇怪的打印行为时间。睡觉在python中

2024-05-29 00:12:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过在同一条线上每秒打印一个点来创造一种进步。像“钓鱼…”。我用的是:

import time

print('Fishing', end='')
for i in range(5):
    time.sleep(1)
    print('.', end='')

但它会等待5秒,然后一次打印Fishing.....。但是当我不使用end=''时,它每秒都会打印点,但是会在不同的行上这样

^{pr2}$

我的问题:

  1. 为什么print会这样?在
  2. 我怎样才能在同一行上每秒打印一个点?在

Tags: inimportfortimerangesleepend行上
3条回答

使用

 print('.', end="", flush=True)

这是因为print被认为是一个昂贵的操作:它通常会等到必须打印大量数据,或者直到遇到新行(通常只有当输出被写入终端时):

Output buffering is determined by file. Use file.flush() to ensure, for instance, immediate appearance on a screen.

显然,这并不昂贵,因为它需要几分钟:但要求终端操作员打印新内容,或者要求操作系统将数据写入文件(在I/O重定向的情况下)仍然不是“闪电般的”。在

通过使用^{} on the standard output channel,可以强制打印队列中仍然存在的所有数据。在

  1. 为什么print会这样?在

这与print关系不大,而与您的终端关系更大。出于性能原因,每次出现换行符时文本才会“刷新”,而不是一次一个字符。在

  1. 我怎样才能在同一行上每秒打印一个点?在

每次打印时手动“刷新”标准输出:

import time
import sys

print('Fishing', end='')
sys.stdout.flush()
for i in range(5):
    time.sleep(1)
    print('.', end='', flush=True)  # another way

如果您一直需要此功能,可以定义单独的刷新打印功能:

^{pr2}$

相关问题 更多 >

    热门问题