如何在input() - 函数中显示文本应用着色/格式(类似于print语句格式)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在input() - 函数中显示文本应用着色/格式(类似于print语句格式)?相关的知识,希望对你有一定的参考价值。

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

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

from colorama import init
init(autoreset=True)

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

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

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

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

enter image description here

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

enter image description here

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

提前致谢!

答案

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

唯一合理的解决办法似乎是使用没有提示的input;你不应该在没有换行的情况下做print你的提示(Python 2中的尾随,或Python 3中的end="")。

以上是关于如何在input() - 函数中显示文本应用着色/格式(类似于print语句格式)?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据某些搜索模式在 unix 中为文本文件着色?

如何使用 Ruby 将文本输出着色到终端? [关闭]

如何在D3中为文本div的特定部分着色?

如何在Vim插件输出中为单词着色

为啥这个文本没有被 ncurses 着色?

BASH输出着色显示