首页 > 解决方案 > 如何对 input() 函数中显示的文本应用着色/格式(类似于打印语句格式)?

问题描述

我有一个小型游戏应用程序,它是从 Windows 控制台 (cmd.exe) 启动的。我可以使用 ANSI 转义序列以任何所需的方式格式化文本。

我也很想通过input()-method 对文本应用格式,但我还没有找到方法。这是测试代码...

from colorama import init
init(autoreset=True)

RED = "\x1b[1;31;40m"

print(f"{RED}This text is red\n")

not_red = input(f"{RED}Insert some random stuff: ")

在我的 Windows 控制台中,您将看到 ANSI 序列在输入语句中显示为一个简单的字符串:

在此处输入图像描述

而在我的 Spyder IDE 控制台中,它具有相反的效果:

在此处输入图像描述

谁能向我解释不同控制台中显示的行为?有没有办法input()在 Windows cmd 控制台中格式化 -text ?这是我的程序正常运行的地方,我想让它更漂亮:-)

提前致谢!

标签: pythonformattingstring-formattingwindows-consolecolorama

解决方案


colorama通过替换sys.stdoutsys.stderr使用解释 ISO 6429 序列的版本来工作,进行适当的 Win32 调用来实现它们,并将其余字符发送到基础流。这解释了您的观察:input不使用 Python 级别sys.stdout.write,并且 Spyder 自己解释序列,但不受 Win32 调用的影响。

唯一合理的解决方法似乎是在input没有提示的情况下使用;除了没有换行符的提示( Python 2 或Python 3 中print的尾随)之外,您不需要做任何其他事情。,end=""


推荐阅读