【问题标题】:Why does print with end='' doesn't appear until new line? [duplicate]为什么 print with end='' 直到换行才会出现? [复制]
【发布时间】:2021-07-19 16:57:19
【问题描述】:

我一直在用 python 3.9 编写一个程序,并且在拥有这段代码之后:

#Print 3 dots at the interval shown
def dots(t):
    t *= 3
    sleep(t)
    print('.', end='')
    sleep(t)
    print('.', end='')
    sleep(t)
    print('.')

这叫它:

# These are completely aesthetic
sleep(0.25)
print("Defining Functions", end='')
dots(0.4)

我希望程序打印 Defining Functions 并在 1.2 秒后 3 次,在末尾添加一个点 (.)。真正发生的是在 3.85 秒后,它用点打印了整个内容(Defining Functions...)。所以在添加新行(第三个点)之前它没有打印任何东西。

对不起,如果乱七八糟,我不知道如何做好这些问题

【问题讨论】:

    标签: python python-3.x newline


    【解决方案1】:

    Python 将输出缓冲到标准输出。这是因为一次编写更大的文本更有效(更少的系统调用)。

    默认情况下,如果标准输出连接到终端,输出将是行缓冲的。因此,打印换行符会刷新缓冲区,您会立即看到输出。 如果 stdout 被重定向到管道或文件中,Python 会更加积极地缓冲,并且不会刷新换行符,只有当缓冲区已满时。

    为避免此问题,请在休眠前显式刷新缓冲区:

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

    【讨论】:

    • 谢谢。我只是不知道在 SO 中搜索什么。
    【解决方案2】:

    flush=True 传递给print

    def dots(t):
        t *= 3
        sleep(t)
        print('.', end='', flush=True)
        sleep(t)
        print('.', end='', flush=True)
        sleep(t)
        print('.', flush=True)
    
    sleep(0.25)
    print("Defining Functions", end='', flush=True)
    dots(0.4)
    

    你可能会问为什么print 会这样,打印一些东西对于大多数编程语言来说并不是一件非常快速和直接的事情,python 正在等待只打印一次以提高效率,但你可以明确告诉它立即刷新您的消息,而无需等待其他打印。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2020-12-13
      • 1970-01-01
      • 2021-04-08
      • 2022-01-21
      • 1970-01-01
      相关资源
      最近更新 更多