写扫描器的时候要实现在同一行不断变换文字的扫描状态效果,之前都是调用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)