gpt4 book ai didi

python - sys.stdout.write\r回车,如何覆盖所有字符?

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:41 24 4
gpt4 key购买 nike

我正在玩 itertools.cycle,我使用一个简单的列表作为输入。然后我写了一个 while 循环,我想在遍历它们时基本上用每种颜色覆盖我的输出。 sys.stdout.write('\r' + colors) 行不会覆盖所有字符,只会覆盖下一个颜色的字符串的长度。最后,我在每次迭代之间有 0.5 秒的延迟。

import itertools
import time
colors = ['green', 'yellow', 'red']
traffic_light = itertools.cycle(colors)
while True:
sys.stdout.write('\r' + next(traffic_light))
sys.stdout.flush()
time.sleep(.5)

当我在循环中达到“黄色”时,当打印较短的“绿色”和“红色”字符串时,我会留下“w”或“低”。我的输出看起来像这样(在打印“黄色”的第一个循环之后)。

redlow
greenw
yellow

我可以用 '\r' 回车完全覆盖输出吗?

最佳答案

回车 '\r' 会将光标发送到行首,它可以覆盖现有文本。您可以将其与序列 CSI K 结合使用,后者从当前光标删除到行尾。

只需将 \r 替换为 \r\x1b[K。参见 ANSI escape code .

import itertools
import sys
import time
colors = ['green', 'yellow', 'red']
traffic_light = itertools.cycle(colors)
while True:
sys.stdout.write('\r\x1b[K' + next(traffic_light))
sys.stdout.flush()
time.sleep(.5)

试试这些额外的转义序列:

# Add color
colors = ['\x1b[32mgreen', '\x1b[33myellow', '\x1b[31mred']

请注意此技术的局限性...如果终端足够短以致于您的文本换行,程序将在您每次打印时向前移动一行。如果您需要更强大的东西,curses为您提供更多功能,但在 Windows 上无法立即使用。

关于python - sys.stdout.write\r回车,如何覆盖所有字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52370298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com