-
在
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()