如何在input()函数中将颜色/格式应用于显示的文本(类似于打印语句格式)?

时间:2018-08-30 17:06:18

标签: python formatting string-formatting windows-console colorama

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

我也很想对input()方法中的文本应用格式设置,但是我还没有找到一种方法。这是测试代码...

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序列在输入语句中显示为简单字符串:

enter image description here

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

enter image description here

有人可以向我解释在不同控制台中显示的行为吗? 是否可以在Windows cmd控制台中格式化input()文本?这是我的程序正常运行的地方,我想使其更漂亮:-)

谢谢!

1 个答案:

答案 0 :(得分:3)

coloramareplacing sys.stdout and sys.stderr使用的版本解释ISO 6429序列,进行适当的Win32调用以实现它们,并将其余字符发送到基础流上。这说明了您的观察结果:input不使用Python级别的sys.stdout.write,Spyder解释了序列本身,但不受Win32调用的影响。

唯一合理的解决方法似乎是在没有提示的情况下使用input;您只需要做print且没有换行符的提示(Python 2中尾随,或Python 3中end=""后)就可以了。