讲师中心 微信公众号

工具推荐

视频效率加速
AniShort
AniShort

AI短剧协同制作平台

Laper
Laper

剧本策划到成片协作

剧云
剧云

中文短剧剧本制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

subprocess 如何捕获彩色 ANSI 输出并保留格式

酷墨大大_7631

酷墨大大_7631

发布时间:2026-01-21 12:11:02

|

179人浏览过

|

来源于php中文网

原创

要捕获带颜色的ANSI输出,关键在于欺骗子进程使其认为运行在支持颜色的终端中:优先使用script -qec "cmd"或--color=always参数,其次设环境变量如CLICOLOR=1,Unix下可用pty.fork()模拟TTY,Windows不支持后者。

subprocess 如何捕获彩色 ansi 输出并保留格式

subprocess 默认会丢失 ANSI 色彩控制码,因为多数命令(如 ls --color=auto、grep --color=auto)检测到输出不是终端(tty)时,会自动禁用颜色。要捕获带颜色的 ANSI 输出,关键在于**欺骗子进程,让它认为自己正运行在支持颜色的终端中**。

让命令认为 stdout 是 tty(最常用)

很多命令只在检测到 stdout 是终端时才输出 ANSI 转义序列。可通过以下方式模拟:

  • 使用 script 命令(Linux/macOS):它创建伪终端(pty),天然支持颜色。
    script -qec "your_command" /dev/null —— -q 静默,-e 保持退出码,-c 执行命令,/dev/null 忽略脚本日志头尾。
  • Python 中调用 script:
    import subprocess<br>result = subprocess.run(<br>    ["script", "-qec", "ls --color=auto /tmp"],<br>    capture_output=True,<br>    text=False  # 保持 bytes,避免解码破坏转义码<br>)<br>print(result.stdout)  # 包含 \x1b[34m 等 ANSI 序列

强制命令启用颜色(简单直接)

绕过终端检测,显式要求颜色输出:

  • ls --color=always、grep --color=always、docker ps --format "table {{.ID}}\t{{.Status}}" --color=always
  • 设置环境变量(对部分工具有效):
    env = {"CLICOLOR": "1", "LS_COLORS": os.getenv("LS_COLORS", "")},再传给 subprocess.run(..., env=env)

手动模拟 TTY(高级,跨平台兼容性稍弱)

Python 的 pty 模块(Unix only)可创建伪终端:

DeepBI DHTML 页面生成器
DeepBI DHTML 页面生成器

生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur

下载
import pty<br>import os<br><br>pid, fd = pty.fork()<br>if pid == 0:  # 子进程<br>    os.execv("/bin/ls", ["ls", "--color=auto", "/tmp"])<br>else:  # 父进程<br>    output, _ = os.read(fd, 4096), os.close(fd)<br>    print(output)  # 含 ANSI

⚠️ 注意:Windows 不支持 pty;且需处理读取阻塞、缓冲、退出状态等细节,适合有控制需求的场景。

捕获后处理与显示

捕获到的字节流含原始 ANSI 序列(如 b'\x1b[32mOK\x1b[0m'),可:

  • 直接写入支持 ANSI 的终端(如 sys.stdout.buffer.write(stdout))
  • 用 ansi2html、rich 或正则清洗/转换(如去除颜色:re.sub(b'\x1b\[.*?m', b'', stdout))
  • 保存为文件供后续查看(需用支持 ANSI 的查看器,如 less -R)

不复杂但容易忽略:核心是让被调用程序“相信”它在终端里运行,而不是靠 Python 自己加色。优先试 --color=always 或 script,简洁可靠。

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
Sass和less的区别
Sass和less的区别

Sass和less的区别有语法差异、变量和混合器的定义方式、导入方式、运算符的支持、扩展性等。本专题为大家提供Sass和less相关的文章、下载、课程内容,供大家免费下载体验。

3227

2023.10.12

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

569

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1698

2024.03.01

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1849

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1231

2024.06.27

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3439

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2998

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

1548

2023.08.01

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

60

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn