对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追加元素到列表的方法
Jul 28 Python
Python简单实现Base64编码和解码的方法
Apr 29 Python
简单了解Python中的几种函数
Nov 03 Python
python实现简易动态时钟
Nov 19 Python
浅谈Python中函数的定义及其调用方法
Jul 19 Python
Python自动化导出zabbix数据并发邮件脚本
Aug 16 Python
对pytorch中的梯度更新方法详解
Aug 20 Python
用python中的matplotlib绘制方程图像代码
Nov 21 Python
Django app配置多个数据库代码实例
Dec 17 Python
Python实现SMTP邮件发送
Jun 16 Python
Python3如何使用tabulate打印数据
Sep 25 Python
OpenCV实现常见的四种图像几何变换
Apr 01 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
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
2014/06/06 PHP
PHP中array_slice函数用法实例详解
2014/11/25 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
js分解url参数(面向对象-极简主义法应用)
2012/08/09 Javascript
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
2015/04/27 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
AngularJS 过滤器(自带和自建)详解
2016/09/19 Javascript
配置eslint规范项目代码风格
2019/03/11 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
几个提升Python运行效率的方法之间的对比
2015/04/03 Python
python getopt详解及简单实例
2016/12/30 Python
python实现字符串连接的三种方法及其效率、适用场景详解
2017/01/13 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
python解析yaml文件过程详解
2019/08/30 Python
python保存log日志,实现用log日志画图
2019/12/24 Python
python基于property()函数定义属性
2020/01/22 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
python使用openpyxl操作excel的方法步骤
2020/05/28 Python
如何理解Python中包的引入
2020/05/29 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
基于OpenCV的路面质量检测的实现
2020/11/04 Python
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
竞选部长演讲稿
2014/04/26 职场文书
2015年酒店前台工作总结
2015/04/20 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
Python echarts实现数据可视化实例详解
2022/03/03 Python