热门标签 | 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,原创技术文章第一时间推送。




推荐阅读
  • 本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ... [详细]
  • Zabbix自定义监控与邮件告警配置实践
    本文详细介绍了如何在Zabbix中添加自定义监控项目,配置邮件告警功能,并解决测试告警时遇到的邮件不发送问题。 ... [详细]
  • 本文详细探讨了在Java中如何将图像对象转换为文件和字节数组(Byte[])的技术。虽然网络上存在大量相关资料,但实际操作时仍需注意细节。本文通过使用JMSL 4.0库中的图表对象作为示例,提供了一种实用的方法。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 如何在Django框架中实现对象关系映射(ORM)
    本文介绍了Django框架中对象关系映射(ORM)的实现方式,通过ORM,开发者可以通过定义模型类来间接操作数据库表,从而简化数据库操作流程,提高开发效率。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • OBS Studio自动化实践:利用脚本批量生成录制场景
    本文探讨了如何利用OBS Studio进行高效录屏,并通过脚本实现场景的自动生成。适合对自动化办公感兴趣的读者。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 深入体验Python的高级交互式Shell - IPython
    IPython 是一个增强型的 Python 交互式 Shell,提供了比标准 Python 控制台更为强大的功能,适用于开发和调试过程。它不仅支持直接执行 Linux 命令,还提供了丰富的特性来提高编程效率。 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • IO流——字符流 BufferedReader / BufferedWriter 进行文件读写
    目录节点流、处理流读文件:BufferedReader的使用写文件:BufferedWriter的使用节点流处理流节点流和处理流的区别和联系字符流Buf ... [详细]
  • 尽管Medium是一个优秀的发布平台,但在其之外拥有自己的博客仍然非常重要。这不仅提供了另一个与读者互动的渠道,还能确保您的内容安全。本文将介绍如何使用Bash脚本将Medium文章迁移到个人博客。 ... [详细]
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社区 版权所有