“渲染”带有回车符(^M)的文本文件并将输出保存到文件

“渲染”带有回车符(^M)的文本文件并将输出保存到文件

我有一个运行很长时间的Python CLI程序,并且有一种进度条,它基本上在循环中打印一些文本,末尾没有“\n”,在下一次迭代时它会打印“\r”以擦除该行,再次打印一些文本等等:

while some_condition:
    print "\rprocessed {} out of {}".format(done_counter, all_counter),

它在控制台中完美工作,但是当我将标准输出重定向到文件时,毫不奇怪我会得到很多“已处理……^M”。我想要的是获得干净的、“渲染的”文件表示,就像在控制台中看到的那样,并处理掉所有“^M”。我不想只删除这些控制字符,而是将它们应用于文本。

作为当前的解决方法,我这样做:tail -n<NUM_LINES> screenlog_file足够<NUM_FILES>大,然后用鼠标选择“渲染”文本,将该蚂蚁粘贴复制到新文件。我想知道是否有更方便的方法来实现这一点。

编辑

感谢@Archemar,发现。它解决了我当前的问题,因为我可以修改代码。然而,任何仅使用 linux utils 的想法/解决方法都受到高度赞赏。

答案1

对于此类应用程序,我使用运行程序script(以避免将输出重定向到文件时更改其行为),然后typescript使用 sed 脚本过滤结果文件。例如,请参阅我的回答我可以使用 unix utils 以编程方式将 ANSI 控制代码“烧入”到文件中吗?,讨论script2log

还有其他例子,比如评论中提到的。然而,提到的那些并没有解决这种特殊情况(其中回车符用于重击文本),但仅消除控制字符。

相关内容