You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:43:12