对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 相关文章推荐
Windows下Python的Django框架环境部署及应用编写入门
Mar 10 Python
python的多重继承的理解
Aug 06 Python
Flask框架web开发之零基础入门
Dec 10 Python
情人节快乐! python绘制漂亮玫瑰
Aug 18 Python
Python 使用folium绘制leaflet地图的实现方法
Jul 05 Python
关于pymysql模块的使用以及代码详解
Sep 01 Python
python3.7将代码打包成exe程序并添加图标的方法
Oct 11 Python
python实现拼接图片
Mar 23 Python
使用python实现时间序列白噪声检验方式
Jun 03 Python
用python写一个带有gui界面的密码生成器
Nov 06 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
Jan 05 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支持多种格式图片上传(支持jpg、png、gif)
2011/11/03 PHP
php正则表达匹配中文问题分析小结
2012/03/25 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
PHP答题类应用接口实例
2015/02/09 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
PHP实现简单用户登录界面
2019/10/23 PHP
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
node.js中的fs.open方法使用说明
2014/12/17 Javascript
jquery序列化方法实例分析
2015/06/10 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
JS实现购物车特效
2017/02/02 Javascript
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
node实现的爬虫功能示例
2018/05/04 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
关于uniApp editor微信滑动问题
2021/01/15 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
Python实现的石头剪子布代码分享
2014/08/22 Python
python实现机器学习之元线性回归
2018/09/06 Python
Python 3 实现定义跨模块的全局变量和使用教程
2019/07/07 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
业务员简历自我评价
2014/03/06 职场文书
设计大赛策划方案
2014/06/13 职场文书
学校安全工作汇报材料
2014/08/16 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
何时使用Map来代替普通的JS对象
2021/04/29 Javascript
简单介绍Python的第三方库yaml
2021/06/18 Python
服务器nginx权限被拒绝解决案例
2022/09/23 Servers