- 在
shell
脚本中运行python
命令时后面加了-u
参数,例如:python -u xx.py
,这个-u
表示什么? 标准输出:sys.stdout.write()
和标准错误:sys.stderr.write()
均是向屏幕打印的语句。print
语句也就是调用了sys.stdout.write()
,print(obj)
实质上调用的是sys.stdout.write(obj+'\n')
,print
在打印时会自动加个换行符,以下两行等价:
sys.stdout.write('hello'+'\n') print 'hello'
- 举例
import sys sys.stdout.write("sdo-1 ") sys.stderr.write("sde-1 ") sys.stdout.write("sdo-2 ") sys.stderr.write("sde-2 ")
- 上面输出
预想
的结果为:sdo-1 sde-1 sdo-2 sde-2
。 - 上面输出
实际
的结果为:sde-1 sde-2 sdo-1 sdo-2
。 - 原因是
python
缓存机制,虽然stderr
和stdout
默认都是指向屏幕的,但是stderr
是无缓存的,程序往stderr
输出一个字符,就会在屏幕上显示一个。 - 而
stdout
是有缓存的,只有遇到换行或者积累到一定的大小,才会显示出来。这就是为什么上面的会最先显示两个stderr
的原因。
-u
参数的使用
- 使用:
python -u xx.py
。 - 有了上面的案例,就可以引出
python
的-u
参数了,python
命令加上-u(unbuffered)
参数后会强制其标准输出
也同标准错误
一样不通过缓存
直接打印到屏幕。 - 再次执行得到的结果:
sdo-1 sde-1 sdo-2 sde-2
,就变成预期结果了。
print
函数的flush
参数,使用flush=True
之后,会在print
结束之后,不管有没有达到条件,立即将内存中的东西显示到屏幕上,清空缓存:
print('dzm', flush=True
stdout.flush()
函数也有此效果:
import sys sys.stdout.write('dzm') sys.stdout.flush()