对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 元组(Tuple)操作详解
Mar 11 Python
python实现复制整个目录的方法
May 12 Python
Python argv用法详解
Jan 08 Python
Python 数据结构之旋转链表
Feb 25 Python
numpy实现合并多维矩阵、list的扩展方法
May 08 Python
python版opencv摄像头人脸实时检测方法
Aug 03 Python
python修改txt文件中的某一项方法
Dec 29 Python
Python使用dict.fromkeys()快速生成一个字典示例
Apr 24 Python
flask框架路由常用定义方式总结
Jul 23 Python
djano一对一、多对多、分页实例代码
Aug 16 Python
Python使用configparser读取ini配置文件
May 25 Python
python tkinter实现定时关机
Apr 21 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 spl_autoload_register实现自动加载研究
2011/12/06 PHP
PHP5中Cookie与 Session使用详解
2013/04/30 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
2016/10/08 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
PHP编程计算日期间隔天数的方法
2017/04/26 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
document.getElementById的简写方式(获取id对象的简略写法)
2010/09/10 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
使用jQuery实现验证上传图片的格式与大小
2014/12/03 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
学习javascript面向对象 理解javascript对象
2016/01/04 Javascript
动态加载js文件简单示例
2016/04/21 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
2016/10/10 Javascript
DWR3 访问WEB元素的两种方法实例详解
2017/01/03 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
Elasticsearch实现复合查询高亮结果功能
2019/09/10 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
微信小程序点击滚动到指定位置的实现
2020/05/22 Javascript
基于javascript处理nginx请求过程详解
2020/07/07 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
浅要分析Python程序与C程序的结合使用
2015/04/07 Python
python先序遍历二叉树问题
2017/11/10 Python
python代码实现ID3决策树算法
2017/12/20 Python
python和shell监控linux服务器的详细代码
2018/06/22 Python
Pycharm新手使用教程(图文详解)
2020/09/17 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
应征英语教师求职信
2013/11/27 职场文书
学习焦裕禄同志为人民服务思想汇报
2014/09/10 职场文书
2014年会计主管工作总结
2014/12/20 职场文书
中国汉字听写大会观后感
2015/06/02 职场文书
mysql left join快速转inner join的过程
2021/06/30 MySQL
Python时间操作之pytz模块使用详解
2022/06/14 Python