【问题标题】:Why python don't print after a time.sleep()?为什么 python 在 time.sleep() 之后不打印?
【发布时间】:2020-03-11 23:39:48
【问题描述】:

我用python编程快2年了,在看一些老代码的时候发现了一件很奇怪的事情。

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)但没有任何反应。

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

【问题讨论】:

    标签: python python-3.x printing


    【解决方案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 语句以跳出循环。

    【讨论】:

    • 我不认为它解决了 OP 的问题。您的代码只打印一次数字。
    • 没有递归。
    • 哦,恐怕我误解了这个问题。
    • 我认为你应该删除这个答案
    【解决方案2】:

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

    【讨论】:

    • 感谢您的回答,我给了另一个用户以帮助他在这个网站上成长
    【解决方案3】:

    试试这个:

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

    【讨论】:

      【解决方案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

      【讨论】:

        【解决方案5】:

        您使用的是哪个版本的 PYTHON?我能够在我使用 PYTHON 3.7 in PYCHARM 2019.2.4 的 PC 上运行您的代码。
        它还在 PYTHON 3.7.5 shell

        上成功运行

        【讨论】:

        • 我在 Windows 10 和 Android 10(测试版)上使用 Python 3.7
        猜你喜欢
        • 1970-01-01
        • 2015-07-28
        • 1970-01-01
        • 1970-01-01
        • 2013-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多