sys.stdout.write()方法——标准输出打印

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

语法参考

Sys.Stdout是sys模块中的标准输出对象,可以实现将数据向屏幕、文件等进行输出。Sys.Stdout通过write 方法实现数据的标准输出。Sys.Stdout.write()方法的基本用法如下:

sys.stdout .write(obj)

obj:输出的内容或文件

事实上,使用print()方法进行打印输出时,其实是将内容传递给sys.stdout标准输出,然后通过sys.stdout.write()方法进行输出,Sys.Stdout.write() 输出完光标会停留在输出内容的最后位置。而print()方法输出后光标回跳到下一行行首,所以要实现等同效果,需要在Sys.Stdout.write()输出时追加一个换行符,如代码:

print('hello')

等同于:

import sys     # 调用sys模块

sys.stdout.write('hello' + '\n')   

    快用锦囊

锦囊1:常规输出内容到屏幕

sys.stdout.write()方法可以直接进行输出,配合转义字符可以进行换行、对齐等操作,在使用前一定先调用sys模块,下面举例一些常规的输出,代码如下:

import sys     # 调用sys模块

sys.stdout.write('用户名称:')   # 正常输出,光标在最后一个字符后面

sys.stdout.write('张三丰')       # 在上一个光标处输出

sys.stdout.write('\n用户密码:')  # 先换行输出,光标在最后一个字符后面

sys.stdout.write('********\n')    # 在上一个光标处输出,输出完内容后换行到下一行行首

sys.stdout.write('确认密码:')

sys.stdout.write('********\n')    # 输出完内容后换行到下一行行首

sys.stdout.write('商品名称\t')    # 输出完内容后增加一个制表符距离

sys.stdout.write('商品价格\t')    # 输出完内容后增加一个制表符距离

sys.stdout.write('采购数量\t')    # 输出完内容后增加一个制表符距离

sys.stdout.write('商品金额')

程序运行结果如下:

用户名称:张三丰

用户密码:********

确认密码:********

商品名称    商品价格    采购数量    商品金额

锦囊2:在一行输出连续延时文字

在编写程序时,有时需要动态输出一些提示性文字,如程序加载、连网、或杀毒时,如果需要用户等待一点时间,可以输出提示用户并显示进度。下面代码实现在提示文字后动态输出程序加载进度:

sys.stdout.write('程序正在安装,请稍后')

sys.stdout.write("\n")

for in range(20):

    sys.stdout.write('#')

    time.sleep(0.3)

程序运行效果如图1、图2所示:

如果动态输出的文字希望在原始位置跑马灯似的循环输出,需要将开始文字先定位到行首,然后输出并刷新。转移字符"\r"可以使光标回到行首,如代码:

sys.stdout.write("\r")

刷新输出使用flush()方法,如:

sys.stdout.flush()

下面代码实现动态跑马灯输出效果,每次循环输出1到6个状态,往复进行。代码如下:

import sys     # 调用sys模块

import time

sys.stdout.write('动态输出跑马灯文字\n')

for in range(20):

    for in range(6):

        sys.stdout.write('.')

        sys.stdout.flush()

        time.sleep(0.3)

输出效果如图3、图4、图5所示:

锦囊3:原位置动态输出文字或图标

在某些程序开发中,经常需要在某位置动态重复输出一些内容,如杀毒软件、计数程序、倒计时程序等。下面代码输出杀毒软件杀毒时提示用户杀毒时间的的动态模拟显示,代码如下:

import sys     # 调用sys模块

import time

sys.stdout.write('杀毒程序正在全盘检查,请稍后\n')

for in range(20):

    sys.stdout.write("\r")

    if i%2==1 :

        sys.stdout.write("\\")

    else:

        sys.stdout.write("/")

    sys.stdout.flush()

    time.sleep(0.3)

程序运行结果图6、图7所示

如果是计算程序,需要在原位置动态进行计数,如进行30个数的计数,代码如下:

import sys     # 调用sys模块

import time

sys.stdout.write("\n")

sys.stdout.write('计数程序\n')

i=0

while i<30:

    i=i+1

    sys.stdout.write("\r")

    sys.stdout.write(str(i))

    sys.stdout.flush()

    time.sleep(0.5)

程序运行效果如图8、图9、图10所示:

倒数程序是在输入一个倒数数字后,按照输入的数字倒数的程序。倒数的数字需要动态在原始位置输出,如进行简单的60个数的倒数程序,代码如下:

import sys     # 调用sys模块
import time
sys.stdout.write("\n")
sys.stdout.write('倒数程序\n')
i=int(input('请输入倒数的数字:'))
while i>0:
    i=i-1
    sys.stdout.write("\r")
    sys.stdout.write(str(i))
    sys.stdout.flush()
    time.sleep(1)

程序运行效果如图11、图12所示

    应用场景

场景一:输出程序安装的进度条

安装程序时,通常都会有安装进度显示,以便让用户了解安装进度和时间。安装进度一般要用刻度显示安装进度情况,用百分比显示安装比例,如下程序,通过“|”格数显示安装进度,用百分比显示安装比例,设置batch参数数值可以控制安装格数和进度。代码如下:

import sys      #  调入系统模块

import time     #  调入时间模块

batch=1     # 控制安装的进度格

for in range(int(100/batch)):   # 100/batch 进度次数

    sys.stdout.write("\r")    # 回到行首

    sys.stdout.write('|'*i*batch + str(i*batch)+'%')   # 输出进度和百分比

    sys.stdout.flush()   # 刷新输出

    time.sleep(1)        # 1秒暂停再执行

程序运行效果如图13、图14、图15所示:

图13  安装进度显示

图14  安装进度显示

图15  安装进度显示

场景二:动态输出当前时间

在程序运行时,如果要动态显示当前的时间,程序运行的时间,该怎么实现呢?同样,使用sys.stdout流,结合时间模块,可以很容易实现,代码如下:

import sys      #  调入系统模块

import time     #  调入时间模块

sys.stdout.write('动态输出时间\n')

i=50

while i>0:

    sys.stdout.write("\r")

    sys.stdout.flush()

    sys.stdout.write(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime() ))

    time.sleep(0.5)

程序运行效果如图16所示:

图16  时间输出

场景三:输出内容到文本文件

使用sys.stdout流不但可以将内容输出到屏幕,还可以输出到文件,代码如下:

import sys      #  调入系统模块
with open('mingri.txt','w') as f:
    sys.stdout=f
    print('hello world')

打开mingri.txt文件,我们发现“hello world”被写入到该文件中,如图17所示:

图17  mingri.txt文件的内容

  • 15
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子味冰可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值