对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的SimPy库简化复杂的编程模型的介绍
Apr 13 Python
深入理解Python中命名空间的查找规则LEGB
Aug 06 Python
Python中list列表的一些进阶使用方法介绍
Aug 15 Python
python使用pycharm环境调用opencv库
Feb 11 Python
python+POP3实现批量下载邮件附件
Jun 19 Python
python通过链接抓取网站详解
Nov 20 Python
Pyspark获取并处理RDD数据代码实例
Mar 27 Python
如何理解python面向对象编程
Jun 01 Python
通过代码实例了解Python sys模块
Sep 14 Python
python 实现波浪滤镜特效
Dec 02 Python
使用sublime text3搭建Python编辑环境的实现
Jan 12 Python
Python Flask请求扩展与中间件相关知识总结
Jun 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
法压式咖啡之制作法
2021/03/03 冲泡冲煮
Access数据库导入Mysql的方法之一
2006/10/09 PHP
怎样才能成为PHP高手?学会“懒惰”的编程
2006/12/05 PHP
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
PHP生成短网址的3种方法代码实例
2014/07/08 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
PHP常用的小程序代码段
2015/11/14 PHP
thinkPHP中volist标签用法示例
2016/12/06 PHP
js 如何实现对数据库的增删改查
2012/11/23 Javascript
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
jquery网页元素拖拽插件效果及实现
2013/08/05 Javascript
让页面上两个div中的滚动条(滑块)同步运动示例
2013/08/07 Javascript
javascript中打印当前的时间实现思路及代码
2013/12/18 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
vue js秒转天数小时分钟秒的实例代码
2018/08/08 Javascript
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
jQuery选择器之基本过滤选择器用法实例分析
2019/02/19 jQuery
MySQL最常见的操作语句小结
2015/05/07 Python
Python 数据结构之旋转链表
2017/02/25 Python
python批量修改图片大小的方法
2018/07/24 Python
python使用magic模块进行文件类型识别方法
2018/12/08 Python
Python 获取div标签中的文字实例
2018/12/20 Python
PyCharm永久激活方式(推荐)
2020/09/22 Python
Numpy 多维数据数组的实现
2020/06/18 Python
教师节倡议书
2014/08/30 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
2015年教研室工作总结范文
2015/05/23 职场文书
欧元符号 €
2022/02/17 杂记