monster's Blog

夕阳碧霄亭

python的stdout输出无缓存

monster posted @ 2014年2月12日 17:47 in 心情 , 2874 阅读

写扫描器的时候要实现在同一行不断变换文字的扫描状态效果,之前都是调用shell中的printf实现的,感觉比较二,今天正好又遇到这个问题,顺便解决下。

print '123'
sleep(1)
print '123'
sleep(1)
print '123'
sleep(1)
print '123'

首先这个程序,在运行时并不是每隔一秒输出一个123,而是程序结束时4个123同时输出,那就直接写stdout试试

stdout.write('123')
sleep(1)
stdout.write('123')
sleep(1)
stdout.write('123')
sleep(1)
stdout.write('123')

结果还是一样,后来查了下资料说是stdout在输出时是有缓存的,strerr无缓存,实验下

stderr.write('123')
sleep(1)
stderr.write('123')
sleep(1)
stderr.write('123')
sleep(1)
stderr.write('123')

这样果然可以的。那有什么办法让stdout也变成无缓存模式,这里有三种办法

1,对python加-u参数

2,加PYTHONUNBUFFERED环境变量

3,sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

 

 

 

Avatar_small
依云 说:
2014年2月12日 18:41

手动刷新一下就可以了: sys.stdout.flush()
stderr 和 stdout 的意义不一样的,不要乱用。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter