我有一个小的游戏应用程序,它是从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序列在输入语句中显示为简单字符串:
在我的Spyder IDE控制台中,它具有相反的效果:
有人可以向我解释在不同控制台中显示的行为吗?
是否可以在Windows cmd控制台中格式化input()
文本?这是我的程序正常运行的地方,我想使其更漂亮:-)
谢谢!
答案 0 :(得分:3)
colorama
由replacing sys.stdout
and sys.stderr
使用的版本解释ISO 6429序列,进行适当的Win32调用以实现它们,并将其余字符发送到基础流上。这说明了您的观察结果:input
不使用Python级别的sys.stdout.write
,Spyder解释了序列本身,但不受Win32调用的影响。
唯一合理的解决方法似乎是在没有提示的情况下使用input
;您只需要做print
且没有换行符的提示(Python 2中尾随,
或Python 3中end=""
后)就可以了。