Windows10下VS2019中Python3.9无法使用ANSI转义序列求助
解决VS2019终端中Python ANSI转义序列失效问题
问题根源
VS2019社区版默认使用的Windows传统控制台(ConHost)默认未启用ANSI转义序列解析,这导致colorama模块、直接的ANSI转义码都无法生效,只会输出原始转义字符。
解决方法
方法1:手动启用控制台的ANSI支持(无需切换终端)
通过Python调用Windows API修改控制台输出模式,强制开启ANSI转义解析。在代码开头添加以下片段:
import ctypes # 启用控制台的ANSI转义支持 kernel32 = ctypes.WinDLL('kernel32', use_last_error=True) hStdOut = kernel32.GetStdHandle(-11) # 获取标准输出句柄 mode = ctypes.c_uint32() kernel32.GetConsoleMode(hStdOut, ctypes.byref(mode)) mode.value |= 0x0004 # 开启ENABLE_VIRTUAL_TERMINAL_PROCESSING kernel32.SetConsoleMode(hStdOut, mode)
之后再使用colorama或直接ANSI转义码即可生效:
from colorama import Fore, Style print(Fore.RED + '红色文本' + Style.RESET_ALL) print('\033[92m绿色文本\033[0m') # 光标移动测试 print("Previous line") print("\033[F覆盖上一行的文本")
方法2:切换到Windows Terminal(推荐长期方案)
Windows Terminal原生支持ANSI转义序列,配置VS2019使用它:
- 打开VS2019,点击顶部菜单 工具 -> 选项
- 在窗口中依次展开 调试 -> 控制台
- 将“控制台类型”改为 Windows Terminal
- 点击确定后重启调试会话
之后运行原有代码(colorama或自定义转义码),终端就能正确解析ANSI序列。
方法3:修正os.system调用的错误
你之前的os.system("echo [31mThis is red[0m")无效,是因为缺少ANSI转义前缀\033,正确写法:
import os os.system("echo \033[31mThis is red\033[0m")
注意:该方法依赖控制台本身的ANSI支持,需先开启方法1的设置或切换到Windows Terminal。
验证代码
运行以下代码,若能看到彩色文本和光标覆盖效果,说明配置成功:
# 先开启ANSI支持 import ctypes kernel32 = ctypes.WinDLL('kernel32', use_last_error=True) hStdOut = kernel32.GetStdHandle(-11) mode = ctypes.c_uint32() kernel32.GetConsoleMode(hStdOut, ctypes.byref(mode)) mode.value |= 0x0004 kernel32.SetConsoleMode(hStdOut, mode) # 测试着色 print('\033[91m红色\033[0m | \033[92m绿色\033[0m | \033[94m蓝色\033[0m') # 测试光标移动 print("要被覆盖的行") print("\033[F这行替换了上面的内容")
内容的提问来源于stack exchange,提问作者Runsva
相关产品推荐
相关产品推荐

