对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实现微信头像加红色数字功能
Mar 26 Python
Python3.遍历某文件夹提取特定文件名的实例
Apr 26 Python
python最长回文串算法
Jun 04 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
python如何获取列表中每个元素的下标位置
Jul 01 Python
Python爬取爱奇艺电影信息代码实例
Nov 26 Python
Python3 中作为一等对象的函数解析
Dec 11 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
Sep 22 Python
Python pip install如何修改默认下载路径
Apr 29 Python
python能否java成为主流语言吗
Jun 22 Python
Python word文本自动化操作实现方法解析
Nov 05 Python
Django rest framework如何自定义用户表
Jun 09 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
PHP开发入门教程之面向对象
2006/12/05 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
浅谈php调用python文件
2019/03/29 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
javascript中基本类型和引用类型的区别分析
2015/05/12 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
jQuery+AJAX实现无刷新下拉加载更多
2015/07/03 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
Bootstrap CSS布局之表单
2016/12/17 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
微信小程序实现运动步数排行功能(可删除)
2018/07/05 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
微信小程序可滑动月日历组件使用详解
2019/10/21 Javascript
Python深入学习之上下文管理器
2014/08/31 Python
python分割列表(list)的方法示例
2017/05/07 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
儿童学习python的一些小技巧
2018/05/27 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
pycharm配置pyqt5-tools开发环境的方法步骤
2019/02/11 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
Html5 localStorage入门教程
2018/04/26 HTML / CSS
世界领先的26岁以下学生和青少年旅行预订网站:StudentUniverse
2018/07/01 全球购物
党支部遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
工作检讨书怎么写
2015/01/23 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
工程款催款函
2015/06/24 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
工作报告范文
2019/06/20 职场文书
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python
mysql timestamp比较查询遇到的坑及解决
2021/11/27 MySQL