忽略 pexpect 响应中的 ANSI 颜色

2023-11-29

我可以用吗pexpect以忽略输出中的 ANSI 转义码(尤其是颜色)的方式?我正在尝试这样做:

expect('foo 3 bar 5')

...but 有时我得到带有 ANSI 颜色数字的输出。问题是我不知道哪些数字有 ANSI 颜色,哪些没有。

有没有办法使用pexpect但它是否会忽略子进程响应中的 ANSI 序列?


这是一个并不完全令人满意的提案,对 pexpect 类的 2 个例程进行子类化pexpect.Expecter and pexpect.spawn这样传入的数据可以在添加到缓冲区并测试模式匹配之前删除转义序列。这是一个惰性实现,因为它假设任何转义序列总是以原子方式读取,但处理分割读取更加困难。

# https://stackoverflow.com/a/59413525/5008284
import re, pexpect
from pexpect.expect import searcher_re

# regex for vt100 from https://stackoverflow.com/a/14693789/5008284  
class MyExpecter(pexpect.Expecter):
    ansi_escape = re.compile(rb'\x1B[@-_][0-?]*[ -/]*[@-~]')

    def new_data(self, data):
        data = self.ansi_escape.sub(b'', data)
        return pexpect.Expecter.new_data(self, data)

class Myspawn(pexpect.spawn):
    def expect_list(self, pattern_list, timeout=-1, searchwindowsize=-1,
                    async=False):
        if timeout == -1:
            timeout = self.timeout
        exp = MyExpecter(self, searcher_re(pattern_list), searchwindowsize)
        return exp.expect_loop(timeout)

这假设您使用expect()调用一个列表,然后执行

child = Myspawn("...")
rc = child.expect(['pat1'])

由于某种原因,在解码之前获取数据时,我必须使用字节而不是字符串,但这可能只是因为当前的区域设置环境不正确。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

忽略 pexpect 响应中的 ANSI 颜色 的相关文章

  • Python - Pxssh - 尝试登录远程服务器时出现密码拒绝错误

    我正在尝试使用 pexpect 模块 pxssh 登录我的一台服务器 我的密码被拒绝 我想我知道问题是什么 但不知道如何解决 问题是 当我登录服务器时有一个欢迎横幅 无法更改横幅 并且预期会感到困惑 这是我的代码 import pxssh
  • ANSI 颜色集图形渲染在批次中中断并在继续后工作

    我有一个批处理 其中有一个子部分 该子部分迭代 EXE 文件的行以尝试运行 然后该批处理根据 EXE 的退出代码对 EXE 进行排序 由于某种原因 ANSI SGR 在设置前一个图形渲染而不是重新渲染后似乎会破坏或回显文字文本 我回去重新参
  • pytest-cov 如何报告由于 pexpect.spawn 执行的 python 代码的覆盖率?

    我有一个 Python 项目 它使用 pytest cov 进行单元测试和代码覆盖率测量 我的项目的目录结构是 rift python rift The package under test init py main py cli list
  • 过滤掉 ANSI 转义序列 [重复]

    这个问题在这里已经有答案了 我有一个 python 脚本 它试图解释分别写入 stdout 和 stdin 以及从中读取的数据的踪迹 问题是这些数据充满了我不关心的 ANSI 转义 这些转义符是 JSON 编码的 因此它们看起来像 033
  • 使用 PHP 将 ANSI 转义序列转换为 HTML

    这是一个类似的问题this one https stackoverflow com questions 245121 a library to convert ansi escapes terminal formatting color c
  • 上标和下标有 Ansi 转义序列吗?

    我正在玩弄 ANSI 转义序列 例如 echo e e 91mHello e m 在 Linux 控制台上显示彩色文本 现在我尝试使用上标和下标输出 例如a b I read here http www inwap com pdp10 an
  • 在Python 3中调用pexpect模块的expect方法时出现TypeError

    我正在尝试将 pexpect 模块 版本 3 3 与 Python 3 4 0 一起使用 我收到一个错误 类型错误 必须是 str 而不是 bytes 当我调用 child expect 方法时 实际代码是 pexpect 文档中的标准示例
  • ansi 转义序列在 Windows cmd 提示符下不起作用

    我尝试了 ANSI 转义序列 例如 033 K 033 dd 033 dG等等 在 AIX 中 当我在Windows中使用telnet时 它不起作用 使用腻子也可以正常工作 我不想使用 NCURSES 但是printfs 任何想法将不胜感激
  • Terminal.app 可以遵循 ANSI 转义码吗?

    我注意到 随着TERM环境变量设置为xterm or xterm 256colorMac OS X 的 Terminal app 实用程序尊重大多数 ANSI 转义码 至少当这些转义码涉及更改文本颜色时 例如 echo e 033 0 31
  • 如何在Python中使用pexpect获得子进程的自发输出

    这与我的另一篇文章有 关wx TextCtrl 或底层 GTK 的多线程问题 https stackoverflow com questions 4183404 multithreading problem with wx textctrl
  • 什么是回车、换行和换页?

    以下控制字符的含义是什么 回车符 换行 换页 回车符表示返回当前行的开头而不向下前进 这个名字来自打印机的托架 因为在创造这个名字时显示器还很少见 这通常被转义为 r 缩写为 CR 并且具有 ASCII 值 13 或 0xD Linefee
  • 它仍然适用于在 RedHat7 上使用 pexpect 还是有替代方法来执行命令并响应提示?

    我尝试在 Redhat7 中使用 pexpect for ansible 但无法安装它 我只得到 pexpect noarch 2 3 11 el7 RHEL7 版本 或者 pexpect 是否有替代方法来执行命令并响应提示 看起来像的版本
  • 在浏览器中呈现终端输出

    我有一个文件 其中包含用以下命令捕获的一堆终端日志screen公用事业 这是一个片段 A 0m 27m 24m J 34m 39m base 38 5 242mbase 39m 35m 39m 133 B K 1l gt 2004l A 0
  • 在 Windows 终端中启用 ANSI 序列

    我偶然发现一个有趣的问题 在 Windows 中 C gt lua gt print x1b 95mMagenta x1b 0m 95mMagenta 0m 但如果我跑os execute 即使使用空命令 在此之前 它按预期工作 C gt
  • `\x1b(B` 是做什么的?

    I m a Blessed https pypi python org pypi blessed用户 最近 当我试图找出该内容时term bold 函数 我得到这个输出 x1b 1m x1b B x1b m 我明白什么 x1b 1m and
  • vim :AnsiEsc - 如何默认打开它们?

    我有带有彩色日志条目的日志文件 假设扩展名为 smt2 其中颜色由 ansi 转义码定义 我安装了vim插件基于AnsiEsc vim http www vim org scripts script php script id 302 现在
  • emacs shell 命令输出不显示 ANSI 颜色,但显示代码

    当我做M 在我的 emacs 21 4 中 ANSI 代码是字面意思 例如 ls color 0m 0m05420273 pdf 0m 0m100829 Ba o1 pdf 0m 有没有办法同时使用颜色和UTF8 同样的问题已经被之前在SO
  • 如何设置 pexpect ssh 会话的列宽?

    我正在编写一个简单的 python 脚本来通过 SSH 连接到 SAN 运行一组命令 最终 每个命令将与时间戳一起记录到单独的日志中 然后退出 这是因为我们连接的设备不支持证书 ssh 连接 并且当前固件版本没有良好的日志记录功能 我似乎遇
  • 如何捕获密码提示

    我有以下代码 更新为包括 pexpect import sys import subprocess import pexpect print 0 ssh subprocess Popen ssh A t email protected cd
  • 有没有办法从 ANSI 转义字符创建橙色?

    我正在寻找一个控制代码来使用 ANSI 或其他标准在终端中创建橙色文本 这可能吗 我只看到黄色和红色可用 并且我认为您不能将红色和黄色混合用于同一角色 严格来说 不 ANSI 从未标准化任何被称为 橙色 的东西 对于终端的控制序列 有些终端

随机推荐