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

时间:2019-11-15 19:25:49

标签: python python-3.x printing

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

import random, sys, time

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

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

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

我尝试更改控制台(Windows终端,powershell和CMD),但没有任何反应。

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

5 个答案:

答案 0 :(得分:4)

此答案Python sleep() inhibit print with comma?建议在sys.stdout.flush()print之间添加sleep。经过测试-有效。

答案 1 :(得分:4)

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()

或者,您可以:

  • 在打印后致电sys.stdout.flush()(与Python 2兼容);
  • 在执行脚本(-u)时使用python -u script.py标志;
  • 将环境变量PYTHONUNBUFFERED设置为TRUE

答案 2 :(得分:1)

您正在使用哪个版本的 PYTHON ?我可以在 PYCHARM 2019.2.4 中使用 PYTHON 3.7 的PC上运行您的代码。
它还可以在 PYTHON 3.7.5 Shell

上成功运行

答案 3 :(得分:0)

尝试一下:

import random, sys, time
try:
    while True:
        print(' ', str(random.randint(100,999)), end='', flush=True)
        time.sleep(1)
except:
    sys.exit()

答案 4 :(得分:-1)

这是因为您有一个永远循环的while True子句,导致它无限递归地循环。

这是更新的代码

import random, sys, time

try:
    while True:
        print(' ', str(random.randint(100,999)), end='')
        time.sleep(0.01)
        break
except:
    sys.exit()

我添加了一个break语句以退出循环。