ansifilter不会过滤ANSI转义码

编程语言 2026-07-07

我写了下面的C++程序,试图在控制台中模拟处理进度。一切都能正常运行并显示。当我把程序输出重定向到一个文件,然后使用 ansifilter 命令过滤ANSI转义码时,得到的过滤输出与预期不符。

abcd.log 的预期输出

Done

abcd.log 的当前输出

Doneing...

main.cpp

#include <chrono>
#include <iostream>
#include <thread>

void display_processing(const std::string& processing_text, const std::string& completed_text) {
    for (int i = 0; i < 10; ++i) {
        std::cout << processing_text;
        std::cout << std::string((i % 3) + 1, '.') << std::flush;

        std::this_thread::sleep_for(std::chrono::seconds(1));
        std::cout << "\x1b[2K\r" << std::flush;
    }

    std::cout << completed_text << std::endl;
}

int main() {
    display_processing("Waiting", "Done");
}

命令:

g++ main.cpp && ./a.out |& tee abc.log && ansifilter abc.log > abcd.log

解决方案

\r 将光标移动到行首

\n 新的一行(在某些控制台设置中,意味着将光标移动到行首)

请改用 \n\r\n 之一,代替 \r

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章