您当前的位置:首页 > 计算机 > 编程开发 > Python

Python 命令 -u 参数作用

时间:03-03来源:作者:点击数:
CDSY,CDSY.XYZ
  • 在 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()
    
CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门