[英]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() 用逗號禁止打印? 建議在print
和sleep
之間添加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.