当前位置: 首页 > news >正文

python无缓存(转载)

reference:http://luy.li/2010/08/29/pythonunbuffered/#comment-11451

考虑以下python程序:

#!/usr/bin/env python
 
import sys
 
sys.stdout.write("stdout1 ")
sys.stderr.write("stderr1 ")
sys.stdout.write("stdout2 ")
sys.stderr.write("stderr2 ")

其中的sys.stdout.write也可以换成print。
运行这程序,你觉得会输出什么?试验一下,就会发现,其实输出并不是

stdout1 stderr1  stdout2 stderr2

而是:

stderr1 stderr2 stdout1  stdout2

究其原因,是因为缓存:虽然stderr和stdout默认都是指向屏幕的,但是stderr是无缓存的,程序往stderr输出一个字符,就会在 屏幕上显示一个;而stdout是有缓存的,只有遇到换行或者积累到一定的大小,才会显示出来。这就是为什么上面的会显示两个stderr的原因了。
然而,有时候,你可能还是希望stdout的行为和stderr一样,能不能实现呢?当然是可以的,而且对于python,实现起来还特别方便,以下是两个方法:

python -u stderr_stdout.py
PYTHONUNBUFFERED=1 python stderr_stdout.py

第一种方法是给python指定 -u 参数,第二种方法是在python运行时,指定 PYTHONUNBUFFERED 环境变量,这两种方法其实是等效的。
当然,也可以在程序的第一行指定 #!/usr/bin/python -u 然后程序加可执行权限来运行,或者把 export PYTHONUNBUFFERED=1 写到 .bashrc 里去。

相关文章:

  • 使用windows crypto API加密解密
  • MyEclipse环境下Hibernate入门实例
  • 彻底弄懂CSS盒子模式
  • Linux启动流程
  • 按类别DF特征词选择算法
  • Dell Insprion 6400坏
  • Makefile相关资料
  • 浅谈角色与权限
  • Exchange2007如何给邮件通讯组Distribution Group设置Send As与Behalf 权限
  • 错误与修正
  • 转: CRT检测内存泄漏技巧以及注意问题
  • RIP协议拓扑结构变化-收敛
  • Redhat 下不重启系统发现LUN
  • asp.net导出数据到EXCEL简单有效
  • RedHat 6.0环境下Oracle 8.0.5的安装
  • 时间复杂度分析经典问题——最大子序列和
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • CSS3 变换
  • Linux CTF 逆向入门
  • Lsb图片隐写
  • nginx 配置多 域名 + 多 https
  • oldjun 检测网站的经验
  • Spring声明式事务管理之一:五大属性分析
  • 区块链将重新定义世界
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 我的zsh配置, 2019最新方案
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 用jquery写贪吃蛇
  • gunicorn工作原理
  • scrapy中间件源码分析及常用中间件大全
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #HarmonyOS:基础语法
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • .net CHARTING图表控件下载地址
  • .net framework 4.0中如何 输出 form 的name属性。
  • .Net Winform开发笔记(一)
  • .NET下的多线程编程—1-线程机制概述
  • .NET中的十进制浮点类型,徐汇区网站设计
  • .net中我喜欢的两种验证码
  • /3GB和/USERVA开关
  • @Autowired @Resource @Qualifier的区别
  • @ConfigurationProperties注解对数据的自动封装
  • @ModelAttribute 注解
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
  • [20180224]expdp query 写法问题.txt
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [C++提高编程](三):STL初识
  • [CTO札记]如何测试用户接受度?
  • [git]git命令如何取消先前的配置
  • [HeadFrist-HTMLCSS学习笔记][第一章Web语言:开始了解HTML]
  • [LeetCode] Copy List with Random Pointer 拷贝带有随机指针的链表