为什么python在time.sleep()之后不打印?

use*_*624 5 python printing python-3.x

我用 python 编程将近 2 年了,我在看一些旧代码时发现了一件非常奇怪的事情。

import random, sys, time

try:
    while True:
        print(' ', str(random.randint(100,999)), end='')
        time.sleep(0.01)
except:
    sys.exit()
Run Code Online (Sandbox Code Playgroud)

按照这段代码的语法,我的程序应该永远打印一个空格和一个从 100 到 999 的随机数,但这并没有发生。

当我运行此代码时,屏幕上没有任何显示,直到我按下 CTRL-C,即使删除 try 语句也不会改变任何内容。

我尝试更改控制台(Windows 终端、powershell 和 CMD),但什么也没发生。

请有人帮我解决这个问题吗?谢谢

Ant*_*din 7

Python 将打印输出保存在缓冲区中,并在实际显示之前等待行尾。要在Python 3中强制显示,可以添加关键字flush=True

import random, sys, time

try:
    while True:
        print(' ', str(random.randint(100,999)), end='', flush=True)
        time.sleep(0.01)
except:
    sys.exit()
Run Code Online (Sandbox Code Playgroud)

或者,您可以:

  • sys.stdout.flush()打印后调用(Python 2 兼容);
  • -u执行脚本时使用该标志 ( python -u script.py);
  • 将环境变量设置PYTHONUNBUFFEREDTRUE.


Ili*_*bev 5

这个答案Python sleep() 禁止用逗号打印?建议sys.stdout.flush()print和之间添加sleep。测试过 - 有效。