ansifilter不会过滤ANSI转义码
我写了下面的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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。