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

导入requests_html后ANSI格式失效问题及修复方案咨询

解决导入requests_html后ANSI文本格式失效的问题

我明白你遇到的麻烦——用ANSI转义码设置的加粗、下划线格式,在导入requests_html的HTMLSession后就失效了,但字符串本身的内容明明没变化(__repr__输出一直正常)。这个问题确实是requests_html模块的锅,它在导入时会悄悄修改终端的输出设置,导致ANSI转义码的部分格式被忽略。

下面给你几个可行的修复方案:

方案1:延迟导入requests_html

最简单的办法就是把requests_html的导入语句放到所有需要输出带格式文本的代码之后。这样在终端还没被修改前,就已经完成了格式输出,后续导入模块不会影响已经输出的内容,也不会干扰之后的格式显示。

修改后的代码示例:

bold = "\033[1m"
underlined = "\033[4m"
red = "\033[91m"
endc = "\033[0m"

def red_bold_underlined(string):
    return bold + underlined + red + string + endc

x = red_bold_underlined('stackoverflow question')
print(x)
print(x.__repr__())

print()
print(x)
print(x.__repr__())

# 把导入放到所有输出操作之后
from requests_html import HTMLSession

方案2:重置标准输出流

requests_html导入时可能替换了sys.stdout对象,导致终端无法正确解析ANSI转义码。我们可以手动将stdout重置为系统原始的输出对象,恢复ANSI格式支持。

代码示例:

bold = "\033[1m"
underlined = "\033[4m"
red = "\033[91m"
endc = "\033[0m"

def red_bold_underlined(string):
    return bold + underlined + red + string + endc

# 先导入模块
from requests_html import HTMLSession
import sys
# 重置stdout为系统原始输出
sys.stdout = sys.__stdout__

x = red_bold_underlined('stackoverflow question')
print(x)
print(x.__repr__())

print()
print(x)
print(x.__repr__())

方案3:强制设置终端环境变量

有时候requests_html会修改TERM环境变量,让终端认为自己不支持ANSI格式。我们可以手动设置TERM为支持完整ANSI转义的类型,比如xterm-256color。

代码示例:

import os
# 先设置终端环境变量
os.environ['TERM'] = 'xterm-256color'

# 再导入requests_html模块
from requests_html import HTMLSession

bold = "\033[1m"
underlined = "\033[4m"
red = "\033[91m"
endc = "\033[0m"

def red_bold_underlined(string):
    return bold + underlined + red + string + endc

x = red_bold_underlined('stackoverflow question')
print(x)
print(x.__repr__())

print()
print(x)
print(x.__repr__())

为什么会出现这个问题?

本质上是requests_html在导入过程中,其依赖的浏览器自动化相关组件会调整终端的输出模式,或者修改标准输出流的属性,导致终端不再识别ANSI转义码中的加粗和下划线控制字符。但字符串本身的字节内容并没有改变,所以__repr__输出始终能显示完整的转义码。

内容的提问来源于stack exchange,提问作者alexzander

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 13:52:33