【Python系列】PYTHONUNBUFFERED=1的作用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

      • 作用详解
      • 典型使用场景
      • 设置方法
        • 1. 终端临时设置(Linux/macOS)
        • 2. Windows 命令行
        • 3. 永久生效(Docker)
        • 4. 替代方案
      • 注意事项
      • 示例对比
      • 总结

PYTHONUNBUFFERED=1 是一个 环境变量,用于控制 Python 程序的输出缓冲行为。它的核心作用是 禁用标准输出(stdout)和标准错误(stderr)的缓冲机制,使得输出内容能够实时显示,而非等待缓冲区填满后才一次性写入。以下是它的具体作用和场景说明:
在这里插入图片描述


作用详解

  1. 禁用输出缓冲

    • 默认情况下,Python 会将输出内容(如 print() 语句)暂存在内存缓冲区中,直到缓冲区填满或程序结束才一次性写入终端/日志文件。
    • 设置 PYTHONUNBUFFERED=1 后,所有输出会 立即写入,不再等待缓冲区。
  2. 实时显示日志

    • 对于需要实时查看输出的场景(如调试、监控、日志流),禁用缓冲可以避免日志延迟,确保信息即时可见。
  3. 崩溃时保留日志

    • 如果程序意外崩溃,未写入缓冲区的日志会丢失。禁用缓冲能确保崩溃前的输出被完整记录。

典型使用场景

  1. 容器化环境(如 Docker/Kubernetes)

    • 在容器中运行 Python 程序时,日志默认通过 stdout 收集。禁用缓冲可让容器日志工具(如 Docker Logs、Fluentd)实时捕获输出。
    • Dockerfile 示例
      ENV PYTHONUNBUFFERED=1
      
  2. 调试和开发

    • 调试长时间运行的程序(如循环、服务)时,实时输出能帮助快速定位问题。
  3. CI/CD 流水线

    • 在自动化构建和测试中,即时输出有助于快速发现错误,避免等待日志刷新。

设置方法

1. 终端临时设置(Linux/macOS)
PYTHONUNBUFFERED=1 python your_script.py
2. Windows 命令行
set PYTHONUNBUFFERED=1 && python your_script.py
3. 永久生效(Docker)

在 Dockerfile 中声明环境变量:

ENV PYTHONUNBUFFERED=1
4. 替代方案
  • 使用 -u 参数(效果相同):
    python -u your_script.py
    
  • 在代码中强制刷新(局部控制):
    print("Debug info", flush=True)  # 单次刷新
    import sys
    sys.stdout.flush()               # 手动刷新缓冲区
    

注意事项

  • 性能影响
    禁用缓冲会增加 I/O 操作频率,对高频输出(如每秒数千次 print())可能降低性能。仅在需要实时日志时启用
  • 默认缓冲策略
    Python 的缓冲行为取决于输出目标:
    • 输出到终端(TTY)时,默认行缓冲(逐行刷新)。
    • 输出到文件或管道时,默认全缓冲(缓冲区满后刷新)。

示例对比

  • 未禁用缓冲(日志可能延迟显示):

    import time
    for i in range(5):print(f"Step {i}")time.sleep(1)
    

    输出可能一次性显示在循环结束后。

  • 禁用缓冲(日志实时显示):

    PYTHONUNBUFFERED=1 python script.py
    

    每秒钟输出一行 Step 0, Step 1… 实时可见。


总结

  • 何时用:需要实时日志、调试崩溃问题、容器化部署。
  • 何时不用:对性能敏感的高频输出场景(如数据处理流水线)。
  • 核心价值:确保关键日志的即时性和完整性。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24033.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Adobe After Effects的动画制作

作者:余佳琪 目录 一、 前言 二、 可动骨骼的选择 三、 运动曲线的设置 四、 图层的选定与应用 五、 插件的应用(阴影,高光,特效) 六、 导出 一、 前言 在当今世界&#x…

可狱可囚的爬虫系列课程 14:10 秒钟编写一个 requests 爬虫

一、前言 当重复性的工作频繁发生时,各种奇奇怪怪提高效率的想法就开始萌芽了。当重复代码的模块化封装已经不能满足要求的时候,更高效的方式就被揭开了神秘的面纱。本文基于这样的想法,来和大家探讨如何 10 秒钟编写一个 requests 爬虫程序。…

QNX上如何抓tracelogger日志

背景 因QNX侧 QVM的分析CPU负载问题在android侧使用trace无法分析,故QNX侧的CPU负载问题需要用到tracelogger日志分析。 例如:使用hogs -l 42|grep qvm 中发现qvm的cpu负载 30%多 但是使用trace日志在Perfetto又查不到qvm信息,则需要抓取qn…

DeepSeek开源周 Day02:从DeepEP开源趋势重新审视大模型Infra

DeepEP 今天DeepSeek开源周第二天,开放了DeepEP仓库,属实看了下源码,和昨天FlashMLA一样,C权重(包括CUDA)还是占据了绝对部分,作为调包侠的我,看到之后望而却步,想看原理…

【Ambari】Ranger KMS

目录 一、Ranger KMS介绍 二、KMS基于Ranger插件安装 一、Ranger KMS介绍 Ranger KMS是把数据存储入后台数据库中。通过Ranger Admin可以集中化管理KMS服务。 Ranger KMS有三个优点 l Key management Ranger admin 提供了创建,更新,删除密钥的Web UI…

055 SpringCache

文章目录 缓存一致性Spring Cachepom.xmlapplication.ymlCubemallProductApplication.javaSpringCache改造三级分类MyCacheConfig.java缓存一致性 缓存一致性 锁 设置过期时间 读写锁 设置过期时间 Spring Cache 1.读模式 缓存穿透:查询一个null数据,…

神卓 S500 组网设备连接交换机的详细步骤

神卓 S500 组网设备连接交换机的详细步骤 神卓 S500 组网设备以其高效、灵活的解决方案,在异地监控组网中发挥着重要作用。本文将详细介绍神卓 S500 组网设备连接交换机的步骤,帮助您轻松实现网络的互联互通。 一、前期准备 确认设备型号与规格&#x…

图像处理案例06 OCR应用

OCR应用 1 OCR读取账单1.1 背景及思路1.2 代码 1 OCR读取账单 1.1 背景及思路 思路 目标是读取图片中账单的信息。首先要截取图片上的账单,考虑到账单并非都是整齐摆放,为了保持算法的通用性,通过透视变换对扣取的账单摆正,然后调…

2024最新版鸿蒙纯血原生应用开发教程文档丨学习ArkTS语言-基本语法

ArkTS是HarmonyOS的主要应用开发语言,在TypeScript基础上进行了扩展,保留了其基本风格,并通过增强静态检查和分析来提高程序的稳定性和性能。本教程将帮助开发者掌握ArkTS的核心功能、语法及最佳实践,以便高效地构建高性能移动应用…

【AIGC】使用Python实现科大讯飞语音服务ASR转录功能:完整指南

文章目录 讯飞ASR转写API完整指南1. 引言2. 讯飞ASR API介绍3. API参数说明3.1 认证参数3.2 上传参数3.3 查询结果参数3.4 orderResult 字段3.5 Lattice 字段3.6 json_1best 字段3.7 st 字段 4. Python代码实现4.1 生成签名4.2 上传音频文件4.3 获取转写结果4.4 解析转写结果 5…

微软开源神器OmniParser-v2.0本地部署教程

安装python环境 我这里是以前安装好的版本:python 3.11.5,这里不再介绍,有需要的可以在网上找教程。 安装Anaconda 我这里是以前安装好的版本:conda 23.7.4,这里也不再介绍,有需要的可以在网上找教程。 …

LLM+多智能体协作:基于CrewAI与DeepSeek的邮件自动化实践

文章目录 引言理解 Flows(工作流)与 Crews(协作组)一、环境准备与工具安装1.1 Python环境搭建1.2 创建并激活虚拟环境1.3 安装核心依赖库(crewai、litellm) 二、本地DeepSeek R1大模型部署2.1 Ollama框架安…

Linux——高级IO

一、前言概念 IO拷贝等待 1. 同步(Synchronous) vs 异步(Asynchronous) 核心区别:关注的是消息通知的机制。 同步:调用方主动等待结果,需持续检查任务是否完成。 异步:调用方发起…

Linux:基础IO

文章目录 一、理解"文件"1、狭义上的理解2、广义上的理解3、文件操作的认知4、系统角度 二、C语言文件接口1、ls /proc/[进程id] -l 命令查看当前正在运⾏进程的信息2、stdin 和 stdout 和 stderr 三、系统文件 I/O1、标志位传递的一种方法2、系统调用 open 三、文件…

zabbix数据采集以及自定义监控

目录 1.数据采集 2.自定义监控 2.1客户端 2.2服务端 ​​​​​​​1.数据采集 点击最新数据页面如下图 往下滑查看具体数据 并点击查看图像就可以看到图像了 就可以看到如下图内容 2.自定义监控 我们通过zabbix客户端任何模板就可以监控我们想要的任何资源 如果…

02.25 继承和多态

编写一个如下场景: 有一个英雄Hero类,私有成员,攻击,防御,速度,生命值,以及所有的set get 方法 编写一个 武器 Weapon 类,拥有私有成员攻击力,以及set get 方法 编写一个…

6. grafana的graph简介

1. Settings功能 2. Visualization功能 (可视化的方式,后续会写一些) 3. Display 功能(显示方面的设置) bars 柱状图方式显示 lines(不选不会出功能) line width 线条的粗细 staircase 会让折…

前缀和代码解析

前缀和是指数组一定范围的数的总和,常见的有两种,一维和二维,我会用两道题来分别解析 一维 DP34 【模板】前缀和 题目: 题目解析: 暴力解法 直接遍历数组,遍历到下标为 l 时,开始进行相加,直到遍历到下标为 r ,最后返回总和.这样做的时间复杂度为: O(n) public class Main …

RoCBert:具有多模态对比预训练的健壮中文BERT

摘要 大规模预训练语言模型在自然语言处理(NLP)任务上取得了最新的最优结果(SOTA)。然而,这些模型容易受到对抗攻击的影响,尤其是对于表意文字语言(如中文)。 在本研究中&#xff0…

【原创工具】文件清单生成器 By怜渠客

【原创工具】文件清单生成器 By怜渠客 刚在论坛看到了一个文件列表生成器 文件列表生成器 - 吾爱破解 - 52pojie.cn ,和我去年写的一个软件很像,当时我也是有需求,要把一个文件夹里及其子文件夹里所有的文件列出来,就临时弄了个小…