- 在 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 参数的使用
- print 函数的 flush 参数,使用 flush=True 之后,会在 print 结束之后,不管有没有达到条件,立即将内存中的东西显示到屏幕上,清空缓存:
print('dzm', flush=True)
- stdout.flush() 函数也有此效果:
import sys
sys.stdout.write('dzm')
sys.stdout.flush()