对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 version 2.7 required, which was not found in the registry
Aug 26 Python
python计算一个序列的平均值的方法
Jul 11 Python
Python实现购物车功能的方法分析
Nov 10 Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 Python
使用requests库制作Python爬虫
Mar 25 Python
python unittest实现api自动化测试
Apr 04 Python
python实现寻找最长回文子序列的方法
Jun 02 Python
Python中pandas模块DataFrame创建方法示例
Jun 20 Python
Python实现手机号自动判断男女性别(实例解析)
Dec 22 Python
如何利用pygame实现简单的五子棋游戏
Dec 29 Python
openCV提取图像中的矩形区域
Jul 21 Python
Python Matplotlib绘制条形图的全过程
Oct 24 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代码
2007/03/03 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
2012/12/29 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
php实现映射操作实例详解
2019/10/02 PHP
javascript开发技术大全-第3章 js数据类型
2011/07/03 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
2012/09/02 Javascript
JavaScript中的apply和call函数详解
2014/07/20 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
2014/09/24 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
2017/02/09 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
NodeJs安装npm包一直失败的解决方法
2017/04/28 NodeJs
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
JS去掉字符串中所有的逗号
2017/10/18 Javascript
jquery在启动页面时,自动加载数据的实例
2018/01/22 jQuery
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
JS实现简单tab选项卡切换
2019/10/25 Javascript
Python 文件管理实例详解
2015/11/10 Python
Python实现的直接插入排序算法示例
2018/04/29 Python
python实现石头剪刀布程序
2021/01/20 Python
PyQt5重写QComboBox的鼠标点击事件方法
2019/06/25 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
地理科学专业毕业生求职信
2013/10/15 职场文书
安全教育月活动总结
2014/05/05 职场文书
防震减灾主题班会
2015/08/14 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python
Mysql实现简易版搜索引擎的示例代码
2021/08/30 MySQL
JS中如何优雅的使用async await详解
2021/10/05 Javascript
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS