为什么在循环中使用 sleep 时,Python 中的 print 不会暂停?

2023-11-24

这段代码:

import time
for i in range(10):
    print(i)
    time.sleep(.5)

导致我的计算机挂起 5 秒,然后打印出 0-9,而不是每半秒打印一个数字。难道我做错了什么?


print,默认情况下,打印到sys.stdout并在内部缓冲要打印的输出。

输出是否被缓冲通常由文件决定,但是如果flush关键字参数为 true,流被强制刷新。

版本 3.3 中更改:添加了flush关键字参数。

Quoting sys.stdout的文档,

交互时,标准流是行缓冲的。否则,它们像常规文本文件一样被块缓冲。

所以,在你的情况下,你需要明确地刷新,就像这样

import time
for i in range(10):
    print(i, flush=True)
    time.sleep(.5)

好吧,关于这个缓冲有很多混乱。让我尽可能解释一下。

首先,如果您在终端中尝试这个程序,他们会这样做行缓冲(这基本上意味着,每当遇到换行符时,将缓冲的数据发送到stdout), 默认情况下。所以,你可以在Python 2.7中重现这个问题,就像这样

>>> import time
>>> for i in range(10):
...     print i,
...     time.sleep(.5)
... 

在 Python 3.x 中,

>>> for i in range(10):
...     print(i, end='')
...     time.sleep(.5)

We pass end=''因为,默认的end值为\n,根据print的文档,

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

由于默认end打破行缓冲,数据将被发送到stdout立即地。

重现此问题的另一种方法是将 OP 给出的实际程序存储在文件中并使用 Python 3.x 解释器执行,您将看到stdout内部缓冲数据并等待程序完成打印。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在循环中使用 sleep 时,Python 中的 print 不会暂停? 的相关文章

  • 使用 JSON 将数据从 Python 导出到 Tableau?

    如何以表格形式从 Python 获取 400 万行和 28 列 我假设 基于搜索 我应该使用 JSON 格式 这种格式可以处理大量数据并且足够快 我制作了 12 行数据的子集并尝试使其正常工作 好消息是 它正在发挥作用 坏消息 不是我想要的
  • url 查询中的字符 %7D 意味着什么?

    如果我使用 url 访问我的 web 应用程序 vi 5907399890173952 html 然后它就可以工作了 但是当我查看日志文件时 googlebot 会尝试访问一个类似的网址 该网址会生成异常 vi 59073998901739
  • SQLAlchemy如何为同一个表定义两个模型

    我有一个表 其中一列是具有两个值的 varchar groupA groupB 当我创建模型时 我想实现两件事 A 组模型 包含 X 数量的相关函数 B 组模型 包含 Y 数量的相关函数 两个模型的功能并不相同 尽管它们代表了same ta
  • 从两个列表中查找总和等于 x 的 2 个数字的最快方法

    我的代码 n 3 a1 0 b1 10 a2 2 b2 2 if b1 gt n b1 n if b2 gt n b2 n diap1 x for x in range a1 b1 1 diap2 x for x in range a2 b
  • 如何从数据存储区刷新 NDB 实体?

    我希望能够在我的代码调用的测试中断言Model put 对于已修改的实体 不幸的是 似乎正在进行一些缓存 例如以下代码 from google appengine ext import ndb class MyModel ndb Model
  • python 使用曲面图和第四个变量的滑块可视化 4d 数据

    如何使用前 3 个变量和第四个变量的 3 维曲面图作为滑块来可视化 4 维数据 从 csv 文件加载 集 我写了一个非常小的示例 重点介绍了实现此目标的方法 import numpy as np import matplotlib pypl
  • 在 SQLAlchemy 中删除父级后删除子级

    我的问题如下 我有两个型号Entry and Tag通过 SQLAlchemy 中的多对多关系链接 现在我想删除所有Tag没有任何对应的Entry后Entry被删除 示例来说明我想要的内容 Entry 1带标签python java Ent
  • 如何使用 Python 从 URL 中删除查询字符串

    Example http example com a text q2 text2 q3 text3 q2 text4 删除后 q2 它将返回 http example com q text q3 text3 在这种情况下 出现了多个 q2
  • 如何向 Iron Python 添加模块?

    我一直在尝试使用 C Visual Studio 执行以下 Python 代码 graphcreater py 我通过 NuGet 包管理器添加了 IronPyton 2 7 7 和 IronPython StdLib 2 7 7 一旦我运
  • 当使用 cx_Freeze 和 tkinter 时,我得到:“DLL 加载失败:找不到指定的模块。” (Python 3.5.3)

    当使用 cx Freeze 和 Tkinter 时 我收到以下消息 File C Users VergilTheHuragok AppData Local Programs Python Python35 32 lib tkinter in
  • 无法通过蓝牙读取心率服务

    我希望创建一个简单的 python 脚本 通过蓝牙从 Polar 传感器读取心率数据 我已经阅读了很多其他帖子 但找不到我能够成功执行的简单内容 我有 Polar 可穿戴设备的设备 MAC 地址 我知道我想要读取的值的服务 UUID HR
  • 在 ubuntu 12.04 上安装 ReviewBoard

    我正在尝试使用 easy install 在 ubuntu 12 04 上安装 ReviewBoard http www reviewboard org docs manual 1 7 admin installation linux ht
  • 是否可以通过 Python 使用 Cocoa API?

    我想知道是否可以将 Cocoa Apple 的 API 与 Python 一起使用 以便能够运行像这样的任何代码link https developer apple com documentation appkit nsworkspace
  • 使用 Python for PyQt WebEngine 授予对 Cam & Mic 的访问权限

    我正在构建一个从 Python 调用的简单 Web 应用程序 我正在使用下面的代码 加载此页面时 以编程方式授予对摄像头和麦克风的访问权限的最简单方法是什么 我只在网上找到了 C 示例 无法找到在 Python 代码中执行此操作的方法 fr
  • Numpy 相当于 if/else 不带循环

    有没有任何Pythonic方法可以删除下面代码中的for循环和if else 此代码迭代 NumPy 数组并检查条件并根据条件更改值 gt gt gt import numpy as np gt gt gt x np random rand
  • Android Systrace 没有这样的文件或目录

    这是错误消息 D Programming Tools ADT bundle sdk platform tools systrace gt python systrace py Traceback most recent call last
  • shutdown.copystat() 在 Azure 上的 Docker 内部失败

    失败的代码在基于以下内容的 Docker 容器内运行python 3 6 stretch德班 当 Django 将文件从一个 Docker 卷移动到另一个 Docker 卷时 就会发生这种情况 当我在 MacOS 10 上测试时 它工作正常
  • Python:正则表达式 findall

    我使用 python 正则表达式从给定字符串中提取某些值 这是我的字符串 mystring txt sometext somemore text here some other text course course1 Id Name mar
  • python chaco轴标签时间格式

    在 Enthought 的 Chaco 中 TimeFormatter类用于格式化刻度的时间字符串 标签 有没有办法指定时间格式 类似于time strftime 源代码现在将显示月份和日期时的格式硬编码为美国风格 MMDD 我想添加一些灵
  • 命名空间与常规包

    命名空间 Python 包之间有什么区别 没有 init py 和一个常规的Python包 有一个 init py 特别是当 init py普通包裹是空的吗 我很好奇 因为最近我忘记了 init py在我制作的包中 我从未注意到任何问题 事

随机推荐