求助, 关于 Python print 的一个小小小小小问题.

2019-05-24 16:47:16 +08:00
 Ahagotyou

def p(): print("我是小米", end="\r") print("我是小米的哥哥大米", end="\r") print("我是雷布斯", end="\r")

output: 我是雷布斯哥哥大米

如何最后只显示 我是雷布斯. 这个函数效果是: 结果全部只显示在一行且以新输出覆盖旧输出, 问题是只是覆盖, 不会清除旧输出, 导致很尴尬.

感谢了~

2117 次点击
所在节点    程序员
11 条回复
Ahagotyou
2019-05-24 16:49:41 +08:00
```
print("服")
```
lance6716
2019-05-24 16:56:49 +08:00
只用 print 做不到,需要调终端接口吧
leoleoasd
2019-05-24 17:03:36 +08:00
可以打印退格键
weyou
2019-05-24 17:07:12 +08:00
这个问题跟语言无关。 这次打印的内容比上一次短的话,在后面补空格到相同的长度来覆盖上一次的打印就行了
baobao1270
2019-05-24 17:14:14 +08:00
每一次输出之前,输出一堆空格,先覆盖掉不久行了
另外,建议用 format 函数统一输出长度
cissoid
2019-05-24 17:23:18 +08:00
用 escape code

print("\x1B[K 我是小米的哥哥大米", end="\r")
lrxiao
2019-05-24 20:22:17 +08:00
写一个 context manager hook 掉 sys.stdout 然后自己搞
nondanee
2019-05-24 20:35:47 +08:00
"\r\033[K"
Qzier
2019-05-25 00:45:31 +08:00
你需要用先清空标准输出,代码如下:
Qzier
2019-05-25 00:45:49 +08:00
import sys
from time import sleep

messages = [
'我是雷军',
'我是小米',
'我是大米'
]

while True:
for msg in messages:
sys.stdout.flush()
sys.stdout.write(f'\r{msg}')
sleep(0.5)
qcts33
2019-05-25 15:14:32 +08:00
你需要将终端想象成一个打字机,而\r 的作用只是把打字的位置强行拉回行首,并不会刷新原有输出,所以新的输出只是覆盖原有输出而已,没有被覆盖到的地方还是保留原状

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/567360

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX