慢速打印等待太久才能打印

时间:2019-06-21 21:12:06

标签: python

(我相信)下面的代码应该打印一个字符,等待0.4秒,然后打印下一个字符,但是等待1.6秒,然后打印孔字符串。

这是我尝试过的一些代码

import time

def print_slow(str):
    for letter in str:
        print(letter, end='')
        time.sleep(.4)

print_slow("junk")

我期望的是:j ... u ... n ... k 我得到的是:......... junk

4 个答案:

答案 0 :(得分:2)

您没有定义打印标准输出的刷新。通过在print命令中不包括flush = True,它将仅将所有字符存储在缓冲区中,直到函数调用解析为止,并且所有这些字符均在单个实例中打印。

import time

def print_slow(str):
    for letter in str:
        print(letter, end='', flush=True)
        time.sleep(.4)

print_slow("junk")

答案 1 :(得分:0)

您需要在每次写入时刷新stdout。否则,当程序结束时,您的打印内容将被缓冲并立即写入:

import sys
import time

def print_slow(str):
    for letter in str:
        print(letter, end='')
        sys.stdout.flush()
        time.sleep(.4)

print_slow("junk")

编辑:

您可以通过使用带有-u标志:python3 -u <scriptname.py>的python来运行脚本。

  

-u:强制stdout和stderr的二进制I / O层不被缓冲;            stdin总是被缓冲;文本I / O层将被行缓冲;            也PYTHONUNBUFFERED = x

答案 2 :(得分:0)

此问题可能与this one重复。

基本上,打印正在缓冲stdout。您需要在每次迭代时刷新输出:

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

答案 3 :(得分:0)

import time, sys

def print_slow(str):
    for letter in str:
        print(letter, end='')
        sys.stdout.flush()
        time.sleep(.4)

print_slow("junk")

只需要强制终端显示输出