Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 是不是;时间。睡眠();在使用“打印”功能的for循环中不工作;完";属性_Python 3.x_Delay - Fatal编程技术网

Python 3.x 是不是;时间。睡眠();在使用“打印”功能的for循环中不工作;完";属性

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

所以,我最近才学习python,我在玩一些代码。我想在一个循环中打印一些没有换行的字符,并且有一些延迟。我在for循环中使用了time.sleep()函数。但是,它所做的只是一次将输出延迟到循环中所需的总时间,然后打印出字符

我确实尝试过没有“结束”属性的方法,效果非常好。但是,我不想断线

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
。这也会强制输出无缓冲。