最新的 Windows 10 更新包括支持 ANSI 转义序列 http://www.nivot.org/blog/post/2016/02/04/Windows-10-TH2-%28v1511%29-Console-Host-Enhancements在 conhost.exe 中。
我已经能够确认 cmd.exe 中正确获取了转义序列,因此我进行了必要的更新。特别是,我尝试输入prompt $e[?25l
,隐藏光标,然后prompt $e[?25h
,再次显示光标。
但是,如果我启动 Python 解释器,然后执行以下操作:
>>> import sys
>>> sys.stdout.write("\033[?25l")
嗯,光标没有隐藏。如何以正确的方式进行设置,以便控制台能够从 Python 获取转义序列?
问题是 Python 解释器不支持 ANSI 转义序列的处理。 ANSI 序列在 Windows 命令提示符下工作,因为cmd
确实使他们能够。如果从命令提示符启动 Python,您会发现 ANSI 序列确实有效,包括用于启用和禁用光标的序列。那是因为cmd
已经为该控制台窗口启用了它们。
如果你想要一些可以单击的东西来启动Python解释器并启用ANSI转义,你可以创建一个快捷方式来运行类似的命令cmd /c C:\PythonXY\python
.
另一个更难的解决方案是使用 ctypes 通过调用以下命令来启用控制台窗口的 ANSI 转义序列处理:SetConsoleMode
Windows API 与ENABLE_VIRTUAL_TERMINAL_PROCESSING https://msdn.microsoft.com/en-us/library/windows/desktop/ms686033(v=vs.85).aspx#ENABLE_VIRTUAL_TERMINAL_PROCESSING标志设置。例如:
import ctypes
kernel32 = ctypes.windll.kernel32
kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)