热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python怎么换行_用Python写了1行日志,业务处理完毕为啥没有输出日志

前言你有没有试过Python脚本输出日志的时候,看到日志文件没有及时输出日志。为什么会这样,今天跟大家分享下。实际测试以下例子是在Python-3.7.

前言

你有没有试过Python脚本输出日志的时候,看到日志文件没有及时输出日志。为什么会这样,今天跟大家分享下。

实际测试

以下例子是在Python-3.7.4环境下操作,请注意。

例子1

确保当前环境变量PYTHONUNBUFFERED为空。

$ export PYTHONUNBUFFERED=""

新建一个testoutput.py

#!/usr/bin/python# coding=utf-8import syssys.stdout.write("stdout1 ")sys.stderr.write("stderr1 ")sys.stdout.write("stdout2 ")sys.stderr.write("stderr2 ")

执行脚本结果:

$ python3 testoutput.py stderr1 stderr2 stdout1 stdout2

可以看到标准错误stderr是直接输出,无缓冲。

而标准输出stdout意思是行缓冲,而这里没有换行,等到缓存区满了之后,再输出。

例子2

确保当前环境变量PYTHONUNBUFFERED为空。

$ export PYTHONUNBUFFERED=""

新建testoutput2.py

#!/usr/bin/python# coding=utf-8import syssys.stdout.write("stdout1\n")sys.stderr.write("stderr1\n")sys.stdout.write("stdout2\n")sys.stderr.write("stderr2\n")

执行脚本结果:

$ python3 testoutput2.py stdout1stderr1stdout2stderr2

跟例子2的区别仅仅是多加了个换行"\n",标准输出stdout就会及时输出。

例子 3

确保当前环境变量PYTHONUNBUFFERED为空

$ export PYTHONUNBUFFERED=""

新建一个third.py 文件

#!/usr/bin/python# coding=utf-8import subprocessprint('第1行输出')subprocess.run("echo 第2行输出", shell=True, check=True)print('第3行输出')

执行脚本结果:

$ python3 third.py第1行输出第2行输出第3行输出

而当我们进行重定向的时候会怎样呢?

$ python3 third.py > result.txt-bash-4.1$ cat result.txt 第2行输出第1行输出第3行输出

在这里可以看出print不是及时输出的,如果重定向文件,标准输出stdout和标准错误stderr进行缓存,等缓存区满了以后,再整体输出。

怎么及时输出呢?

•设置环境变量 export PYTHONUNBUFFERED=1,可以加到用户环境变量中去。•执行python脚本的时候加上参数-u

啥时候需要缓存呢?

主要是为了降低io操作,比如写大文件,就可以进行缓存。

方法如下:

•设置环境变量为空

export PYTHONUNBUFFERED=

•执行python脚本的时候不要加上参数-u

补充下-u参数说明

对于3.7以上版本: 标准输出stdout和标准错误stderr全部采用unbuffered(无缓存)。

Changed in version 3.7: The text layer of the stdout and stderr streams now is un

看到这里,相信你已经Get到了不少知识,真棒。

有什么不清楚的地方,可以在我的小程序里留言,欢迎大家的留言。

871373e0541d08308b85416e1bfc0704.png


欢迎关注我的公众号testerzhang,原创技术文章第一时间推送。




推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文深入探讨了如何通过调整InnoDB的关键配置参数来优化MySQL的随机IO性能,涵盖了缓存、日志文件、预读机制等多个方面,帮助读者全面提升数据库系统的性能。 ... [详细]
  • andr ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 在Python开发过程中,随着项目数量的增加,不同项目依赖于不同版本的库,容易引发依赖冲突。为了避免这些问题,并保持开发环境的整洁,可以使用Virtualenv和Virtualenvwrapper来创建和管理多个隔离的Python虚拟环境。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • MySQL PMM:MyISAM 和 Aria 存储引擎的性能优化
    本文探讨了 MyISAM 和 Aria 存储引擎在 MySQL 中的关键性能指标,包括密钥缓冲区效率、页面缓存读写性能以及事务日志同步策略。通过优化这些参数,可以显著提升数据库的整体性能。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • ###问题删除目录时遇到错误提示:rm:cannotremoveusrlocaltmp’:Directorynotempty即使用rm-rf,还是会出现 ... [详细]
  • 本文详细介绍了Java中的输入输出(IO)流,包括其基本概念、分类及应用。IO流是用于在程序和外部资源之间传输数据的一套API。根据数据流动的方向,可以分为输入流(从外部流向程序)和输出流(从程序流向外部)。此外,还涵盖了字节流和字符流的区别及其具体实现。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
author-avatar
心之约会446
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有