Python 3.x 是不是;时间。睡眠();在使用“打印”功能的for循环中不工作;完";属性
所以,我最近才学习python,我在玩一些代码。我想在一个循环中打印一些没有换行的字符,并且有一些延迟。我在for循环中使用了time.sleep()函数。但是,它所做的只是一次将输出延迟到循环中所需的总时间,然后打印出字符 我确实尝试过没有“结束”属性的方法,效果非常好。但是,我不想断线Python 3.x 是不是;时间。睡眠();在使用“打印”功能的for循环中不工作;完";属性,python-3.x,delay,Python 3.x,Delay,所以,我最近才学习python,我在玩一些代码。我想在一个循环中打印一些没有换行的字符,并且有一些延迟。我在for循环中使用了time.sleep()函数。但是,它所做的只是一次将输出延迟到循环中所需的总时间,然后打印出字符 我确实尝试过没有“结束”属性的方法,效果非常好。但是,我不想断线 from time import sleep print("starting the progress bar") for i in range(50): sleep(0.1) print
from time import sleep
print("starting the progress bar")
for i in range(50):
sleep(0.1)
print("#", end = '')
我希望输出打印一个字符,然后延迟打印另一个字符。但是,脚本延迟0.1秒50次,然后一次打印出所有字符,因为python是行缓冲的,它将在打印标准输出之前等待换行符 解决方案1: 将PYTHONUNBUFFERED=1添加到env.var:
export PYTHONUNBUFFERED=1
这将允许立即转储输出
解决方案2:
在使用Python3时,可以使用flush=True
for i in range(50):
sleep(0.1)
print("#", end = '', flush=True)
默认情况下,Python是行缓冲的。只要您不使用换行符
打印
,输出将被收集但不会显示。您必须强制刷新输出
from time import sleep
print("starting the progress bar")
for i in range(50):
sleep(0.1)
print("#", end = '', flush=True)
请注意,用于查看输出的内容也可能是行缓冲的。这不能在脚本中更改。我刚刚在reddit上找到了一个解决方案
因此,它与缓冲有关
下面是可以工作的代码
from time import sleep
print("starting the progress bar")
for i in range(50):
sleep(0.1)
print("#", end = '', flush = True)
运行程序时,可以使用-u
选项
$ man python3
PYTHON(1) PYTHON(1)
...
-u Force the stdout and stderr streams to be unbuffered. This
option has no effect on the stdin stream.
像这样运行:python3-u file.py
或者,您可以在shell中设置pythonunbuffer
环境变量
PYTHONUNBUFFERED
If this is set to a non-empty string it is equivalent to speci-
fying the -u option.
类似这样:PYTHONUNBUFFERED=“yes”python3 file.py
最后,如其他答案所述,您可以使用flush=True
。您确定您的print
语句不在for循环之外吗?小心indentation@NicLaforge是的,代码中没有缩进错误。不确定@tawab_shakeel为什么在问题中修改了您的代码,因为他用正确的答案编辑了代码。我看了你的原始代码,你的打印内容超出了loop@NicLaforge我只是把代码放在代码块中,否则问题就不是可读的了format@thesuzan如果您觉得任何其他用户未正确完成编辑,您可以选择不接受编辑。这不会改变任何事情。我得到了同样的结果;首先延迟,然后打印字符,中间没有任何延迟。您是从终端运行的吗?我正在windows上使用linux子系统运行Python 3.6.7的代码。但是,我也在Python 3.7.3的anaconda提示符上尝试了它。两个都给了我同样的结果,我不明白。我是否在代码的开头添加“export PYTHONUNBUFFERED=1”?这给了我一个错误。在调用代码之前,不要从终端运行它。或者最好在bashrc文件中设置它,这样它会保留下来。这将产生相同的结果。它只会在最后打印。@NicLaforge我错过了这个要求。试试新版本。或者您可以使用python-u
。这也会强制输出无缓冲。