对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写的服务监控程序实例
Jan 31 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 Python
Django1.7+python 2.78+pycharm配置mysql数据库
Oct 09 Python
Python实现图片滑动式验证识别方法
Nov 09 Python
python中is与双等于号“==”的区别示例详解
Nov 21 Python
python数字图像处理实现直方图与均衡化
May 04 Python
Python封装原理与实现方法详解
Aug 28 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
Dec 04 Python
浅谈python3打包与拆包在函数的应用详解
May 02 Python
Pycharm修改python路径过程图解
May 22 Python
python实现黄金分割法的示例代码
Apr 28 Python
浅析Python OpenCV三种滤镜效果
Apr 11 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
ThinkPHP模板Switch标签用法示例
2014/06/30 PHP
php中adodbzip类实例
2014/12/08 PHP
php 无限级分类 获取顶级分类ID
2016/03/13 PHP
帮助避免错误的Javascript陷阱清单
2009/05/31 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
JS截取字符串实例详解
2015/11/24 Javascript
JSON+Jquery省市区三级联动
2016/01/13 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
深入分析javascript中的错误处理机制
2016/07/17 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
关于JS中二维数组的声明方法
2016/09/24 Javascript
bootstrap suggest下拉框使用详解
2017/04/10 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
JavaScript防止全局变量污染的方法总结
2018/08/02 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
vue配置font-awesome5的方法步骤
2019/01/27 Javascript
Node.js+ELK日志规范的实现
2019/05/23 Javascript
vue计算属性无法监听到数组内部变化的解决方案
2019/11/06 Javascript
python之wxPython应用实例
2014/09/28 Python
python版简单工厂模式
2017/10/16 Python
Python中修改字符串的四种方法
2018/11/02 Python
python实现井字棋小游戏
2020/03/04 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
接口自动化多层嵌套json数据处理代码实例
2020/11/20 Python
给水排水工程专业毕业生推荐信
2013/10/28 职场文书
省三好学生申请材料
2014/01/22 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
2014年社区国庆节活动方案
2014/09/16 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
教你怎么用Python实现多路径迷宫
2021/04/29 Python
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android