Python 中的动态输出
动态输出,即随着程序的运行不断更新输出的内容,常见的应用场景为提示正在加载、显示任务进度等。那么如何在 Python 中动态输出呢?
1. 简单的 Loading 条
只需要在 print 中加上 end 参数,即可以假乱真
1
2
3
4
5
import time
print("Loading", end="")
for i in range(6):
print(".", end="")
time.sleep(0.5)
2. 使用 stdout 实现复杂的动态输出
Ref: Stackoverflow and this post
\r 是回车符,将光标移至行首;flush 函数清空输出缓存中的该行
1
2
3
4
5
6
7
from sys import stdout
from time import sleep
for i in range(6):
stdout.write("\r%d" % i)
stdout.flush()
sleep(0.5)
stdout.write("\n")
3. 使用 ANSI 转义序列 \r\x1b[K
实现复杂的动态输出
若不使用 stdout 库,则需要使用 控制字符 (Control Sequence)来控制输出。
\r 是回车符,将光标移至行首。
\x1b[K 是 ANSI 转义序列。其中 \x1b (或者 \33)在 Python 中代表 ESC
,\x1b[ 即 ESC [
是控制序列导入器 (CSI, Control Sequence Introducer) 标志着控制字符的开始 ,K 是 CSI 序列用于清空该行,\x1b[K 即 ESC [ K
。
总之,记住 \r\x1b[K
这一奇妙的字符串。
1
2
3
4
5
from time import sleep
for i in range(6):
print("\r\x1b[K%d" % i, end="")
sleep(0.5)
print(end="\n")
Python 输出粗体下划线颜色
\33 也可用 \x1b 代替
开始 | 结束 | |
---|---|---|
粗体 | \33[1m |
\33[0m |
斜体# | \33[3m |
|
下划线 | \33[4m |
|
已选中 | \33[7m |
|
黑色 | \33[30m |
|
红色 | \33[31m |
|
绿色 | \33[32m |
|
黄色 | \33[33m |
|
蓝色 | \33[34m |
|
紫色 | \33[35m |
|
蓝绿色 | \33[36m |
|
灰色 | \33[37m |
#:经测试,Jupyter Notebook 不支持输出斜体
1
print("\33[1mBold\33[0m\33[4mUnderline\33[0m\33[1m\33[4mBoldAndUnderline\33[0mNormal")