在Python脚本中将Pygments管道传递给less导致高亮失效
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
打印的时候,一切都正常,但如果用管道传输数据,就会导致高亮显示出问题……
有没有什么想法?
示例:
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之间可以出现除了标准字符以外的其他字符。