如何在Python的input()函数中使用ANSI转义颜色代码?
解决input()中解析ANSI颜色代码的问题
核心原因
input()会直接读取用户输入的原始字符串,不会自动解析Python变量或表达式。所以你输入red+'test'+reset时,它只会被当作普通字符串存储;直接输入ANSI代码时,反斜杠会被转义,导致控制字符无法生效。
解决方案1:自定义占位符替换(安全推荐)
通过定义颜色标记(比如{red}),让用户输入带标记的文本,再替换为对应的ANSI代码。这种方法安全且易维护。
# 定义颜色映射字典 color_map = { 'red': '\x1b[91m', 'yellow': '\x1b[93m', 'blue': '\x1b[94m', 'reset': '\x1b[0m' } # 获取用户输入(示例输入:"The {yellow}sun{reset} is bright in the {blue}sky{reset} today.") user_input = input("输入带颜色标记的文本: ") # 替换标记为ANSI代码 colored_str = user_input.format(**color_map) # 存入字典 color_data = {'content': colored_str} # 测试输出(终端会显示带颜色的文本) print(color_data['content'])
解决方案2:使用eval解析表达式(仅限自用场景)
如果你需要支持red+'test'+reset这类Python表达式写法,可以用eval解析,但绝对不要用于处理不可信输入(会执行任意代码,存在安全风险)。
# 定义颜色变量 red = '\x1b[91m' yellow = '\x1b[93m' blue = '\x1b[94m' reset = '\x1b[0m' # 获取用户输入(示例输入:"red+'test'+reset") user_input = input("输入颜色拼接表达式: ") try: # 解析表达式 colored_str = eval(user_input) color_data = {'content': colored_str} print(color_data['content']) except Exception as e: print(f"解析失败: {str(e)}")
解决方案3:解析直接输入的ANSI代码
如果用户直接输入\x1b[91mtest\x1b[0m这类ANSI代码字符串,可以用ast.literal_eval将转义的反斜杠转换为实际控制字符:
import ast user_input = input("输入ANSI代码文本: ") try: # 转换为带转义字符的字符串 colored_str = ast.literal_eval(f'"{user_input}"') color_data = {'content': colored_str} print(color_data['content']) except Exception as e: print(f"解析失败: {str(e)}")
内容的提问来源于stack exchange,提问作者Tristan
相关产品推荐
相关产品推荐

