对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 排列组合之itertools
Mar 20 Python
Python处理文本文件中控制字符的方法
Feb 07 Python
Python使用matplotlib填充图形指定区域代码示例
Jan 16 Python
解决Python网页爬虫之中文乱码问题
May 11 Python
set在python里的含义和用法
Jun 24 Python
pandas中的series数据类型详解
Jul 06 Python
面向对象学习之pygame坦克大战
Sep 11 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
pycharm激活码有效到2020年11月底
Sep 18 Python
Python json模块与jsonpath模块区别详解
Mar 05 Python
Python使用pyenv实现多环境管理
Feb 05 Python
Python 批量下载阴阳师网站壁纸
May 19 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
example1.php
2006/10/09 PHP
PHP magento后台无法登录问题解决方法
2016/11/24 PHP
PHP反射实际应用示例
2019/04/03 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
2016/05/21 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
jQuery的ztree仿windows文件新建和拖拽功能的实现代码
2018/12/05 jQuery
vue实现购物车列表
2020/06/30 Javascript
详解JavaScript 的执行机制
2020/09/18 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
Python 条件判断的缩写方法
2008/09/06 Python
Python写的一个简单监控系统
2015/06/19 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
Django-Rest-Framework 权限管理源码浅析(小结)
2018/11/12 Python
python如何实现一个刷网页小程序
2018/11/27 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
python使用PIL和matplotlib获取图片像素点并合并解析
2019/09/10 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
python基于openpyxl生成excel文件
2020/12/23 Python
学校介绍信范文
2014/01/14 职场文书
教师旷工检讨书
2014/01/18 职场文书
办理房产过户的委托书
2014/09/14 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书
贫困证明怎么写
2015/06/16 职场文书
业务员管理制度范本
2015/08/06 职场文书
运动会广播稿20字
2015/08/19 职场文书
一文搞清楚MySQL count(*)、count(1)、count(col)区别
2022/03/03 MySQL
浅谈Python中对象是如何被调用的
2022/04/06 Python
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python
VMware虚拟机安装 Windows Server 2022的详细图文教程
2022/09/23 Servers