[英]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.