sys.stdout和print的区别

一 sys.stdout的形式就是print的一种默认输出格式,等于print "%VALUE%"

 print函数是对sys.stdout的高级封装,看下print函数的解释

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.

print是默认调用了sys.stdout.write()方法将输出打印到控制台

print 也可通过file参数将输出打印到其他文件中

f = open('test.txt','a')
print('this is a test',file=f)

二 sys.stdout.write()输出不会自动换行,没有end,可用转义字符自行控制

     /n 换行

     /r  回车到本行首,可刷新输出

 如用sys.stdout.write() 和\r实现自定义进度条

# -*- coding: utf-8 -*-
from tqdm import tqdm
import time
import sys

for i in tqdm(range(100)):
    time.sleep(.1)
for i in range(100):
    a = (i+1)/5
    b = 20-a
    #sys.stdout.write('\r>>convert image %d/%d'%(i,b))

    sys.stdout.write('\r|%s%s|%d%%'%(a*'▇',b*' ',i+1))
    sys.stdout.flush()
    time.sleep(.1)

运行结果如下图:


sys.stdout.flush()强制刷新缓冲区,

缓冲区的刷新方式:
    1.flush()刷新缓存区
    2.缓冲区满时,自动刷新
    3.文件关闭或者是程序结束自动刷新。

当我们需要打印一些字符时,并不是立刻就打印,而是先将需要打印的字符放入缓冲区,在缓冲区刷新时打印,当缓冲区未满,或者程序运行未结束时,可使用sys.stdout.flush()强制刷新缓冲区,立刻进行打印;

附:写出漂亮的进度条模块tqdm

from tqdm import tqdm 
import time
for i in tqdm(range(10000)):  
    time.sleep(0.01) 

运行结果如下:

  • 13
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值