自学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 i 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 i in range(20):
for j 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 i 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 i 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文件的内容