下面的代码应该(我相信(打印一个字符,等待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
你没有定义打印标准输出的齐平。通过在 print 命令中不包含 flush=True,它只会将所有字符存储在缓冲区中,直到函数调用解析,并且所有字符都在单个实例中打印。
import time
def print_slow(str):
for letter in str:
print(letter, end='', flush=True)
time.sleep(.4)
print_slow("junk")
这个问题可能是这个问题的重复。
基本上,打印是缓冲stdout
。您需要在每次迭代时刷新输出:
print(letter, end='', flush=True)
import time, sys
def print_slow(str):
for letter in str:
print(letter, end='')
sys.stdout.flush()
time.sleep(.4)
print_slow("junk")
只需要强制终端显示输出
在每次写入时刷新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
标志的 python 来运行脚本:python3 -u <scriptname.py>
-u :强制标准输出和标准输出的二进制 I/O 层无缓冲; 标准输入始终是缓冲的;文本 I/O 层将被行缓冲; 也是 PYTHONUNBUFFERED=x