评估 Python 字符串中的 ANSI 转义

问题描述 投票:0回答:0

说我有字符串 '\033[2KResolving dependencies...\033[2KResolving dependencies...'

在 Python 控制台中,我可以打印它,它只会显示一次

Python 3.10.9 (main, Jan 19 2023, 07:59:38) [GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> output = '\033[2KResolving dependencies...\033[2KResolving dependencies...'
>>> print(output)
                         Resolving dependencies...

有没有办法得到一个只包含打印输出的字符串?换句话说,我希望有一些功能

def evaluate_ansi_escapes(input: str) -> str:
    ...

这样evaluate_ansi_escapes(output) == 'Resolving dependencies...'


编辑:我想出了以下权宜之计

import re

def evaluate_ansi_escapes(input: str) -> str:
    erases_regex = r"^.*(\\(033|e)|\x1b)\[2K"
    erases = re.compile(erases_regex)
    no_erases = []
    for line in input.split("\n"):
        while len(erases.findall(line)) > 0:
            line = erases.sub("", line)
        no_erases.append(line)
    return "\n".join(no_erases)

这确实成功地产生了我想要的输出:

>>> evaluate_ansi_escapes(output)
'Resolving dependencies...'

但我很想知道是否有更简单的方法来解决这个问题。

python string ansi tty ansi-escape
© www.soinside.com 2019 - 2024. All rights reserved.