对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的类变量和成员变量用法实例教程
Aug 25 Python
python在windows下创建隐藏窗口子进程的方法
Jun 04 Python
python 读取目录下csv文件并绘制曲线v111的方法
Jul 06 Python
基于python的socket实现单机五子棋到双人对战
Mar 24 Python
numpy数组广播的机制
Jul 12 Python
python中selenium操作下拉滚动条的几种方法汇总
Jul 14 Python
对python 中re.sub,replace(),strip()的区别详解
Jul 22 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
PyTorch中Tensor的数据类型和运算的使用
Sep 03 Python
Python爬虫抓取论坛关键字过程解析
Oct 19 Python
Python函数调用追踪实现代码
Nov 27 Python
python的html标准库
Apr 29 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
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
php中数据的批量导入(csv文件)
2006/10/09 PHP
php max_execution_time执行时间问题
2011/07/17 PHP
浅析PHP Socket技术
2013/08/02 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
js下弹出窗口的变通
2007/04/18 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
JS图片定时翻滚效果实现方法
2016/06/21 Javascript
JS中的数组方法笔记整理
2016/07/26 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
2016/08/04 Javascript
jQuery拖拽通过八个点改变div大小
2020/11/29 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
VUE利用vuex模拟实现新闻点赞功能实例
2017/06/28 Javascript
vue + typescript + 极验登录验证的实现方法
2019/06/27 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
Pyhton中单行和多行注释的使用方法及规范
2016/10/11 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
TensorFlow利用saver保存和提取参数的实例
2018/07/26 Python
使用 Python 实现微信群友统计器的思路详解
2018/09/26 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
Python实现快速排序的方法详解
2019/10/25 Python
TFRecord文件查看包含的所有Features代码
2020/02/17 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
C#如何允许一个类被继承但是避免这个类的方法被重载?
2015/02/24 面试题
行政主管岗位职责
2013/11/18 职场文书
电子专业推荐信范文
2013/11/18 职场文书