在Python脚本中将Pygments管道传递给less导致高亮失效

0 投票
1 回答
804 浏览
提问于 2025-04-17 14:00
from pygments.lexers import RstLexer
from pygments.formatters import TerminalFormatter
from pygments import highlight

output = highlight(source, RstLexer(), TerminalFormatter())

p = subprocess.Popen('less', stdin=subprocess.PIPE)
p.stdin.write(output)
p.stdin.close()
p.wait()

当我直接用 print output 打印的时候,一切都正常,但如果用管道传输数据,就会导致高亮显示出问题……

有没有什么想法?

示例:

example

1 个回答

3

这是less的问题,不是Python的问题。你可以用-R这个选项来运行less

-R--RAW-CONTROL-CHARS

这个选项和-r类似,但它只会以“原始”形式输出ANSI的“颜色”转义序列。与-r不同的是,在大多数情况下,屏幕的显示效果会保持正确。ANSI“颜色”转义序列的格式是:

ESC [ ... m

其中的“...”可以是零个或多个颜色指定字符。为了保持屏幕的显示效果,ANSI颜色转义序列被认为不会移动光标。你可以通过设置环境变量LESSANSIENDCHARS,来让less认为除了“m”以外的字符也可以结束ANSI颜色转义序列。还有,你可以通过设置环境变量LESSANSIMIDCHARS,让less认为在ESC和m之间可以出现除了标准字符以外的其他字符。

撰写回答