对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遍历文件夹并删除特定格式文件的示例
Mar 05 Python
python解析xml文件实例分析
May 27 Python
简单谈谈Python流程控制语句
Dec 04 Python
Python实现 多进程导入CSV数据到 MySQL
Feb 26 Python
Python实现针对中文排序的方法
May 09 Python
python验证码识别的示例代码
Sep 21 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
Dec 14 Python
Python3多目标赋值及共享引用注意事项
May 27 Python
Python 获取指定文件夹下的目录和文件的实现
Aug 30 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
Jul 20 Python
Python 找出英文单词列表(list)中最长单词链
Dec 14 Python
python 合并多个excel中同名的sheet
Jan 22 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 变量的定义方法
2010/01/26 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
jQuery之ajax技术的详细介绍
2013/06/19 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
用C/C++来实现 Node.js 的模块(一)
2014/09/24 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
2015/03/21 Javascript
创建自己的jquery表格插件
2015/11/25 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
基于jQuery实现滚动切换效果
2016/12/02 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
2017/01/05 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
pyqt4教程之实现windows窗口小示例分享
2014/03/07 Python
Python实现利用163邮箱远程关电脑脚本
2018/02/22 Python
python如何实现代码检查
2019/06/28 Python
python线程join方法原理解析
2020/02/11 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
2014年公司植树节活动方案
2014/03/04 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
班组建设经验交流材料
2014/05/12 职场文书
大学生就业自荐书
2014/06/16 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
安全生产先进个人事迹材料
2014/12/30 职场文书
酒店员工辞职信范文
2015/02/28 职场文书
七一慰问简报
2015/07/20 职场文书
浅析Django接口版本控制
2021/06/26 Python
SpringBoot实现quartz定时任务可视化管理功能
2021/08/30 Java/Android