对python 命令的-u参数详解


Posted in Python onDecember 03, 2018

缘起:

今天在看arcface的训练代码,在shell脚本中运行python 命令时后面加了-u 参数(python -u xx.py),于是对这个参数进行了下小研究。

准备知识

用网上的一个程序示例来说明,python中标准错误(std.err)和标准输出(std.out)的输出规则(标准输出默认需要缓存后再输出到屏幕,而标准错误则直接打印到屏幕):

import sys
 
sys.stdout.write("stdout1")
sys.stderr.write("stderr1")
sys.stdout.write("stdout2")
sys.stderr.write("stderr2")

其中sys.stdout.write()和sys.stderr.write()均是向屏幕打印的语句。其实python中的print语句就是调用了sys.stdout.write(),例如在打印对象调用print obj 时,事实上是调用了 sys.stdout.write(obj+'\n')。

预想的结果是

stdout1stderr1stdout2stderr2

实际的结果为

stderr1stderr2stdout1stdout2

原因是python缓存机制,虽然stderr和stdout默认都是指向屏幕的,但是stderr是无缓存的,程序往stderr输出一个字符,就会在屏幕上显示一个;而stdout是有缓存的,只有遇到换行或者积累到一定的大小,才会显示出来。这就是为什么上面的会最先显示两个stderr的原因。

-u参数的使用

有了上面的铺垫,就可以引出python 的-u参数了。python命令加上-u(unbuffered)参数后会强制其标准输出也同标准错误一样不通过缓存直接打印到屏幕。

运行结果

stdout1stderr1stdout2stderr2

这样变成了预期的输出了。

注意:以上结果是在python2下执行实现的,本人也在python3下进行了测试,python3下即便加上-u或者加上环境变量UNBUFFERED=1 运行起来stdout依旧写缓存(执行结果stderr1stderr2stdout1stdout2),具体原因没搞清,后续搞清后再来更新。

通过以上分析,不难看出尤其是在将python执行脚本输出到屏幕结果直接重定向到日志文件的情况下,使用-u参数,这样将标准输出的结果不经缓存直接输出到日志文件。

以上这篇对python 命令的-u参数详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python urllib模块urlopen()与urlretrieve()详解
Nov 01 Python
Python使用turtule画五角星的方法
Jul 09 Python
Python中装饰器学习总结
Feb 10 Python
python爬虫获取多页天涯帖子
Feb 23 Python
Python实现动态添加属性和方法操作示例
Jul 25 Python
Python3 jupyter notebook 服务器搭建过程
Nov 30 Python
Python 类属性与实例属性,类对象与实例对象用法分析
Sep 20 Python
Python使用tkinter模块实现推箱子游戏
Oct 08 Python
python创建子类的方法分析
Nov 28 Python
sklearn-SVC实现与类参数详解
Dec 10 Python
使用python批量转换文件编码为UTF-8的实现
Apr 03 Python
详解python中的闭包
Sep 07 Python
python 接收处理外带的参数方法
Dec 03 #Python
Python+OpenCV实现图像融合的原理及代码
Dec 03 #Python
浅谈python脚本设置运行参数的方法
Dec 03 #Python
Linux 修改Python命令的方法示例
Dec 03 #Python
解决Python一行输出不显示的问题
Dec 03 #Python
解决vscode python print 输出窗口中文乱码的问题
Dec 03 #Python
pycharm运行程序时在Python console窗口中运行的方法
Dec 03 #Python
You might like
php4的session功能评述(一)
2006/10/09 PHP
?繁体转换的class
2006/10/09 PHP
php 高性能书写
2010/12/11 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
Laravel框架源码解析之入口文件原理分析
2020/05/14 PHP
在vs2010中调试javascript代码方法
2011/02/11 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
如何写好你的JavaScript【推荐】
2017/03/02 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
重置Redux的状态数据的方法实现
2019/11/18 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
python3序列化与反序列化用法实例
2015/05/26 Python
Python+微信接口实现运维报警
2016/08/27 Python
tensorflow: 查看 tensor详细数值方法
2018/06/13 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
Gap工厂店:Gap Factory
2017/11/02 全球购物
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
预备党员思想汇报范文
2013/12/29 职场文书
总经理司机职责
2014/02/02 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书
如何写观后感
2015/06/19 职场文书
Apache Calcite 实现方言转换的代码
2021/04/24 Servers
Python制作一个随机抽奖小工具的实现
2021/07/07 Python
十大冰系宝可梦排名,颜值最高的阿罗拉九尾,第三使用率第一
2022/03/18 日漫