对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 命令行非阻塞输入的小例子
Sep 27 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
Jan 07 Python
python合并同类型excel表格的方法
Apr 01 Python
Python3.7中安装openCV库的方法
Jul 11 Python
浅析python中的迭代与迭代对象
Oct 08 Python
将pandas.dataframe的数据写入到文件中的方法
Dec 07 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
Oct 27 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
Mar 11 Python
关于matplotlib-legend 位置属性 loc 使用说明
May 16 Python
python打开文件的方式有哪些
Jun 29 Python
python在CMD界面读取excel所有数据的示例
Sep 28 Python
10张动图学会python循环与递归问题
Feb 06 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对字符串的递增运算分析
2010/08/08 PHP
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
2011/04/05 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
JQuery魔力之$("tagName")与selector
2012/03/05 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全(推荐)
2016/12/20 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
WebPack基础知识详解
2017/01/16 Javascript
js实现字符全排列算法的简单方法
2017/05/01 Javascript
详解Vue.js基于$.ajax获取数据并与组件的data绑定
2017/05/26 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
为什么我们要做三份 Webpack 配置文件
2017/09/18 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
中国最大的潮流商品购物网站:YOHO!BUY有货
2017/01/07 全球购物
经济学博士求职自荐信范文
2013/11/23 职场文书
日语专业个人的求职信
2013/12/03 职场文书
民事诉讼授权委托书范文
2014/08/02 职场文书
技术员岗位职责范本
2015/04/11 职场文书
2015年妇幼卫生工作总结
2015/05/23 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
行政处罚告知书
2015/07/01 职场文书
nginx设置资源请求目录的方式详解
2022/05/30 Servers