簡體   English   中英

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

[英]Why python don't print after a time.sleep()?

我在 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 sleep() 用逗號禁止打印? 建議在printsleep之間添加sys.stdout.flush() 測試它 - 有效。

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

您使用的是哪個版本的PYTHON 我能夠在我的 PC 上運行您的代碼,我在PYCHARM 2019.2.4中使用PYTHON 3.7
它還在PYTHON 3.7.5 shell上成功運行

嘗試這個:

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

這是因為您有一個永遠循環的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語句來跳出循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM