[Python] 使用print作进度条(解决end=''时print不显示的问题)

0x00

Python的print()末尾自带\n,如果不想要末尾的\n可以使用end=''控制末尾的字符。
例如这样:

# 示例一
print("12",end='')
print("34")

# 打印
# 1234

# 示例一
print("12",end='-')
print("34")

# 打印
# 12-34

0x01

假如现在要写一个加载进度条,大部分人下意识会这样用:

为了展示方便使用延时
import time

print('加载中',end="")
for n in range(0,10):
    print(".",end="")
    time.sleep(0.5)
print("\n加载成功!")

显示如下:

加载中..........
加载成功!

虽然结果看着没问题,但过程有问题。
理想中的进度条.应该是渐渐出现的,就像这样:

加载中.
加载中..
加载中...
加载中....

可这个程序的加载中..........是整个出现的,就像这样:

// 运行
// 1s
// 2s
// 3s
// 4s
// 5s
加载中..........

0x02

经过查询得知,print只有在接收到\n时才会把数据送到控制台显示。
例如:

# 示例一

print('1',end='') # 控制台不显示
print('2',end='') # 控制台不显示
print('3') # 控制台显示 123

# 示例二

print('1',end='') # 控制台不显示
print('2',end='') # 控制台不显示
print('') # 控制台显示 12

# 示例三

print('1',end='') # 控制台不显示
print('2',end='') # 控制台不显示
print('3\n',end='') # 控制台显示 123

0x03

解决起来也很简单,给print()加一个flush=True即可。
例如上面的0x01的程序,只要改成这样就能实现理想中的效果了。

import time

print('加载中',end="",flush=True)
for n in range(0,10):
    print(".",end="",flush=True)
    time.sleep(0.5)
print("\n加载成功!")
腾讯云活动
最后修改:2022 年 08 月 29 日
如果觉得我的文章对你有用,请随意赞赏

发表评论
使用cookie技术保留您的个人信息以便您下次快速评论,继续评论表示您已同意该条款

🎲