在分析zephyr系统时,看编译过程遇到了python语言的程序,在里面加入了一些打印,结果输出的结果不是按顺序输出的,使用不同的命令窗口,如windows的DOS,MINGW64发现输出的结果不一致。原来是带的输出缓冲引起的

在逻辑上应该是
print(“------------------------------”)
这一句代码执行的,可是从结果来看却是先打印了-- west 这个信息。要解决这个问题就是要关闭缓冲,或者立即输出
但是我们知道print函数默认是有刷新换行的,可知跟不同的编译环境有关

1.python -u

不走缓冲区



可以看到是按逻辑输出的

2. flush buffer

强刷 sys.write 的缓冲区, print 的标准输出实际上是到了 sys.write的缓冲区,
当遇到回车
程序执行结束
flush
缓冲区满
则会输出到控制台

3 概念:什么是全缓冲、行缓冲和无缓冲?

这里的缓冲是指用户层的I/O缓冲区,不是内核缓冲。
1.全缓冲:填满标准I/O缓存区才进行实际的I/O操作。磁盘上的文件用标准I/O打开,默认都是全缓存的。当缓存区填满或者进行flush操作时候才会进行磁盘操作。
2.行缓冲:当输入输出遇到换行符时候就是行缓存了。标准输入和标准输出都是行缓存。
3.无缓冲:用户层不提供缓冲,对流的读写可以立即操作实际文件。典型例子就是标准错误输出,因为它必须尽快输出,且是输出到具有交互式的设备商,如屏幕,不是磁盘。

上述都是I/O缓冲区,其作用是减少read和write的次数,即减少了系统调用,从而减少了系统开销,提高了I/O速度。
内核缓冲区:从理论上讲,内核可以在任何时候写磁盘,但并不是所有的write操作都会导致内核的写动作。内核会把要写的数据暂时存在缓冲区中,积累到一定数量后再一次写入。有时会导致意外情况,比如断电,内核还来不及把内核缓冲区中的数据写到磁盘上,这些更新的数据就会丢失。

4.print函数

print(help(print)) 使用此语句打印 print(…)
print(value, …, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)

Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file:  a file-like object (stream); defaults to the current sys.stdout.
sep:   string inserted between values, default a space.
end:   string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.

python---打印函数print延时且不按顺序输出相关推荐

  1. ZYNQ开发中SDK输出串口选择以及打印函数print、printf、xil_printf的差别

    ZYNQ开发系列--SDK输出串口选择以及打印函数print.printf.xil_printf的差别 前言 两个串口到底是谁在打印? print 和 printf 和 xil_printf 前言 在 ...

  2. ZYNQ开发系列——SDK输出串口选择以及打印函数print、printf、xil_printf的差别

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ开发系列--SDK输出串口选择以及打印函数print.printf.xil_printf的差别 前言 两个串口到底是谁在打印? ...

  3. DIY单片机串口打印函数print

    原始的单片机串口只能发送单字节数据,再加个封装也就能发送个字符串,但是无法发送数字变量,要发送数字变量那基本要引入C语言的库函数printf,但是这个pintf函数 好用确实是好用但是有个很大的缺点相 ...

  4. Python的打印函数print()中占位符%和format()使用以及f格式化字符串

    目录 一.print中占位符分为3种: 1.% 2.format() 3.f格式化字符串 二.举例说明: 1.%占位符: 2.format()函数: 3.f-字符串格式化: 一.print中占位符分为 ...

  5. Python常用函数总结(按照字母顺序)

    一.O 1.os.path.splitext 和os.path.split os.path.splitext()是将文件名和扩展名分开 os.path.split()是将路径和文件全名分开 二.W 1 ...

  6. 转义字符'\r'在Python内置函数print()中的妙用

    在Python 3.x中,内置函数print()用来实现格式化输出,各参数含义请参考本文末尾的相关阅读.本文重点介绍print()函数的end参数以及转义字符'\r'的妙用. 本文末尾的相关阅读中已经 ...

  7. python打印日历小项目

    公众号后台回复"图书",了解更多号主新书内容 作者:Riggle 来源:文科数据员 各位小伙伴,好久不见!数据猿最近在全面复习python知识,继续更新啦!今天带来函数学习的相关知 ...

  8. Python| 阿尔法函数和代码复用

    目录 打招呼函数 能否组成三角形函数 计算n个自然数的立方和 简单计算器实现 转换秒为时间 最大公约数 杨辉三角 线性查找 七段数码管绘制 斐波那契数列计算 汉诺塔实践 合法的用户名 科赫雪花小包裹 ...

  9. python利用列表计算斐波那契数列前30项并输出_python 题目:斐波那契数列计算;题目:站队顺序输出;题目:合法括号组合的生成;题目:用户登录(三次机会)...

    斐波那契数列计算 B 描述 斐波那契数列如下: F(0) = 0, F(1) = 1 F(n) = F(n-1) + F(n-2) 编写一个计算斐波那契数列的函数,采用递归方式,输出不超过n的所有斐波 ...

最新文章

  1. UVA 10479 The Hendrie Sequence
  2. 用python画雪花-python使用turtle库与random库绘制雪花
  3. 你要知道动机何在吗?
  4. C# HSSFWorkbook与XSSFWorkbook的区别和.xls和.xlsx的区别
  5. c mysql 取错误信息_初始化 MYSQL 后为何得到一会错误信息?
  6. 使用javamail 发送邮件
  7. 眼控科技 实习算法工程师面试
  8. 08方法重载,覆写,多态
  9. Python运算符+与+=的那些事
  10. jetbrains全家桶中好用的快捷键插件:Key Promoter X
  11. 秒懂 this(带你撸平this)
  12. android小小的开发细节
  13. Unity读取CSV表格时出现中文乱码处理方式
  14. 带宽总结:3dB带宽、零点到零点带宽、均方根带宽等
  15. ​​​​​​​​​​​勾股数的规律
  16. 狂野飙车8:极速凌云 for Mac v1.0.2 Asphalt 8 好玩的赛车游戏
  17. 适用于顺序磁盘访问的1分钟法则
  18. Python之面相对象-封装 多态 约束 super()
  19. 前端学习笔记02--CSS快速了解
  20. 《当程序员的那些狗日日子》(五十六)步入正轨

热门文章

  1. A-SPICE 进程概要和 CL 计算方法
  2. mysql删除表中数据
  3. 《童虎学习笔记》5分钟了解Citus核心系统表
  4. 潜规则------中国历史中的真实游戏 吴思
  5. tf.layers.flatten()使用
  6. 2018年 团体程序设计天梯赛——题解集
  7. HTTP协议1)----对于应用层的详细讲解
  8. 获取设备唯一ID的几种方式
  9. 我如何选择Parse.com的替代品
  10. 千万不要使用6位密码!密码破解速度全面披露