python stdout_python中stdout输出不缓存的设置方法
考虑以下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 里去。
附:stackoverflow上也有同学遇到类似问题,可以参考一下
地址:http://stackoverflow.com/questions/107705/python-output-buffering
被采纳的代码:
复制代码 代码如下:
class Unbuffered(object):
def __init__(self, stream):
self.stream = stream
def write(self, data):
self.stream.write(data)
self.stream.flush()
def __getattr__(self, attr):
return getattr(self.stream, attr)
import sys
sys.stdout = Unbuffered(sys.stdout)
print 'Hello'
本文标题: python中stdout输出不缓存的设置方法
本文地址: http://www.cppcns.com/jiaoben/python/108957.html
python stdout_python中stdout输出不缓存的设置方法相关推荐
- python stdout清空_python中stdout输出不缓存的设置方法
考虑以下python程序: #!/usr/bin/env python import sys sys.stdout.write("stdout1 ") sys.stderr.wri ...
- python stdout_python的stdout输出无缓存
写扫描器的时候要实现在同一行不断变换文字的扫描状态效果,之前都是调用shell中的printf实现的,感觉比较二,今天正好又遇到这个问题,顺便解决下. print '123' sleep(1) pri ...
- python 加注拼音-Python 获取中文字拼音首个字母的方法
Python:3.5 代码如下: def single_get_first(unicode1): str1 = unicode1.encode('gbk') try: ord(str1) return ...
- python怎么识别拼音-Python 获取中文字拼音首个字母的方法
Python:3.5 代码如下: def single_get_first(unicode1): str1 = unicode1.encode('gbk') try: ord(str1) return ...
- python拼音怎么写-Python 获取中文字拼音首个字母的方法
Python:3.5 代码如下: def single_get_first(unicode1): str1 = unicode1.encode('gbk') try: ord(str1) return ...
- python怎么清屏_python实现清屏的方法 Python Shell中清屏一般有两种方法。
Python Shell 怎样清屏? Python Shell中清屏一般有两种方法. 奈何一个人随着年龄增长,梦想便不复轻盈:他开始用双手掂量生活,更看重果实而非花朵.--叶芝<凯尔特的搏暮&g ...
- python tkinter进度条_在python tkinter中Canvas实现进度条显示的方法
如下所示: from tkinter import * import time #更新进度条函数 def change_schedule(now_schedule,all_schedule): can ...
- python打印日历_python输出指定月份日历的方法
python输出指定月份日历的方法 本文实例讲述了python输出指定月份日历的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/python import calendar ca ...
- python二次开发ug_Siemens NX (UG)中对于Python第三方包(函数库)的设置方法
从NX 10开始,NX Open增加了对Python的支持,使得NX脚本语言的多元性进一步得到扩充.但对于大多数用户来说,选择Python作为脚本语言,主要是想利用Python社区提供的各种函数库或功 ...
最新文章
- 团队工具_「管理工具」部门有效管理的5个工具,打造高效团队
- QGraphicsWidget收不到鼠标、键盘消息解决
- 5阶无向完全图_运动轿跑风 全新上汽名爵5预告图发布
- BERT微调效果不佳?不如试试这种大规模预训练模型新范式
- ESXI NUMA node 1 has no memory..
- 6 个清除 Linux 终端的命令
- IMDB排名前100名经典电影
- 2018电视剧行业调研报告-趋势篇
- CGMB 奔驰钥匙积分 以及 奔驰怪兽详细功能介绍 奔驰调表 奔驰擦空变数箱电脑等等
- PDF文件中如何插入页面?分享一个实用小妙招
- AMD GPU虚拟化
- 你想了解的前端知识都在这里了
- MASM32编程完善SysInfo遇到奇怪故障,真切感受全局变量和局部变量之别……
- Could not load driver class org.neo4j.ogm.drivers.http.driver.HttpDriver(Neo4j连接用bolt还是http)
- 0-1型整数规划—MATLAB数学建模
- 世界上最快的浏览器(mxnitro浏览器)
- A股日内回转交易意义何在?
- 行业分析:什么样的公司有前景?深入分析智力密集型行业公司的类型与特征
- 计算机操作系统原理课件,【】计算机操作系统原理与实例分析PPT课件(完整版 全)精品.ppt...
- OO第5-7次作业总结