设置python的stdout为无缓存模式
浏览:3322次 出处信息
考虑以下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 里去。
建议继续学习:
- 配置Nginx+uwsgi更方便地部署python应用 (阅读:105399)
- 如何成为Python高手 (阅读:53407)
- python实现自动登录discuz论坛 (阅读:31589)
- python编程细节──遍历dict的两种方法比较 (阅读:18996)
- 每个程序员都应该学习使用Python或Ruby (阅读:16271)
- 30分钟3300%性能提升――python+memcached网页优化小记 (阅读:12129)
- 使用python爬虫抓站的一些技巧总结:进阶篇 (阅读:12114)
- 我的PHP,Python和Ruby之路 (阅读:11842)
- Python处理MP3的歌词和图片 (阅读:8327)
- 关于使用python开发web应用的几个库总结 (阅读:7441)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:OAuth 1.0a与1.0协议的改进…
后一篇:nginx在fastcgi模块中转发真实的后端IP >>
文章信息
- 作者:bones7456 来源: I am LAZY bones ?
- 标签: python stdout 无缓存模式
- 发布时间:2010-08-31 01:34:01
建议继续学习
近3天十大热文
- [54] IOS安全–浅谈关于IOS加固的几种方法
- [52] android 开发入门
- [52] 如何拿下简短的域名
- [51] 图书馆的世界纪录
- [49] Go Reflect 性能
- [49] Oracle MTS模式下 进程地址与会话信
- [47] 【社会化设计】自我(self)部分――欢迎区
- [46] 读书笔记-壹百度:百度十年千倍的29条法则
- [36] 程序员技术练级攻略
- [29] 视觉调整-设计师 vs. 逻辑