解析python 命令的-u参数
- 缘起:
今天在看arcface的训练代码,在shell脚本中运行python 命令时后面加了-u 参数(python -u xx.py),于是对这个参数进行了下小研究。
- 准备知识
用网上的一个程序示例来说明,python中标准错误(std.err)和标准输出(std.out)的输出规则(标准输出默认需要缓存后再输出到屏幕,而标准错误则直接打印到屏幕):
import syssys.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命令之m参数 局域网传输
在命令行中使用python时,python支持在其后面添加可选参数. python命令的可选参数有很多,例如:使用可选参数h可以查询python的帮助信息: 可选参数m 下面我们来说说python命令 ...
- python u_对python 命令的-u参数详解
缘起: 今天在看arcface的训练代码,在shell脚本中运行python 命令时后面加了-u 参数(python -u xx.py),于是对这个参数进行了下小研究. 准备知识 用网上的一个程序示例 ...
- python命令行输入参数_Python命令行参数处理
sys模块 sys模块代表了Python解释器,主要用于获取和Python解释器相关的信息,其中 sys.argv 可以获取命令行参数 在Python交互式解释器中可以先导入sys模块 import ...
- python命令行传递参数
python命令行参数传递 本文介绍python的两种参数传递方式,第1种为sys的参数传递,第2种为argparse的参数传递 1. 使用sys的sys.argv来获取命令行参数 import sy ...
- 深入解析Python中函数的参数与作用域
传递参数 函数传递参数时的一些简要的关键点: 参数的传递是通过自动将对象赋值给本地变量名来实现的.所有的参数实际上都是通过指针进行传递的,作为参数被传递的对象从来不自动拷贝. 对于numbers,St ...
- Python命令行选项参数解析策略
概述 在Python的项目开发过程中,我们有时需要为程序提供一些可以通过命令行进行调用的接口.不过,并不是直接使用 command + 当前文件 就ok的,我们需要对其设置可选的各种各样的操作类型.所 ...
- python命令行输入参数_Python3.x那些事儿:[3]命令行参数传递
用命令行调用python脚本的时候,如果想往脚本中传递参数的时候,参数会被python解释器接受转化为一系列的字符串,放在sys模块中的argv列表中,因此可以使用argv[0]来引用第一个参数,以此 ...
- python 命令行输入参数有误_python – 错误:参数太少,必须提供命令行包规范或–file...
当我运行conda命令来创建tensorflow环境时,它显示以下错误消息: (Anaconda3_411) C:\development\anaconda\Anaconda3_411>cond ...
- Python命令行参数解析
Python命令行参数解析 Python命令行解析是指读取终端传入的参数 sys.argv属性 这个是sys库立面的一个属性,其用于接收传入程序的命令行参数.它是一个列表.也就是差不多下面这种类型 s ...
最新文章
- 我的C++笔记(数据的共享与保护)
- [angularjs] angularjs系列笔记(四)控制器
- 学习ansible playbook之前先了解下YAML语法
- Spring@Cacheable注解在类内部调用失效的问题
- WPF ClickOnce应用程序IIS部署发布攻略
- mybatis传递多个参数_MyBatis 映射器
- eview面板数据之混合回归模型_【视频教程】Eviews系列25|面板数据回归分析之Hausman检验及本章常见问题解答...
- 香港中文大学MMLab期待优秀同学加入~
- java文本区水平对齐方式,如何将文本居中在水平StackLayout中?
- 基于容器的虚拟化资源调度系统架构设计 | 原力计划
- python urllib编码
- Luogu2024[NOI2001] 食物链
- 《交互设计沉思录》译序
- Obsidan之数学公式的输入
- 全国计算机等级考试报名支付不了,23日起,全国计算机等级考试开始网上报名...
- 盘点那些年BAT字节跳动等互联网公司的程序员、工程师一夜暴富的都市传说
- ubuntu各种实践笔记
- html5中分镜图文脚本,企业宣传片脚本如何撰写分镜头?
- 关闭英文拼写检查,关闭xml验证
- java 监控linux服务器cpu使用率、内存使用率、磁盘使用率、java进程是否存活等服务