重定向python输出时删除ANSI转义序列

时间:2019-04-25 09:10:58

标签: python-3.x unix

我正在整理一个教学项目,学生将在其中重新实现grep实用程序。我想要实现grep的一种功能,以输出彩色匹配文本。为此,我使用了ANSI转义序列:

# min_example.py
START = '\033[91m'
END = '\033[0m'

some_line = f'this is {START}matching{END} text'
print(some_line)

它完全按预期工作。但是,将输出通过管道传输到文本文件时,包含原始转义序列:

$ python min_example.py > test.txt
$ vi test.txt
this is ^[[91mmatching^[[0m text

真正的grep实用程序设法将颜色输出到终端,但是其输出可以通过管道传输到文本文件,而不会包含任何时髦的转义序列字符。

所以我的问题是:grep在这里有什么不同之处,如何重现它以便可以输出颜色但仍然具有“可管道输出”的输出?

1 个答案:

答案 0 :(得分:0)

事实证明,这是因为grep 不是在启用管道时启用了颜色输出。其--color=auto选项仅在将stdout连接到终端时才启用颜色输出。使用grep --color=always ...运行相同的测试还会导致将ANSI转义字符写入文本文件。

我通过在添加ANSI转义码之前测试sys.stdout.isatty()来解决了这个问题