Pygments 在 python 脚本中通过管道传输到 less 中断突出显示

Posted

技术标签:

【中文标题】Pygments 在 python 脚本中通过管道传输到 less 中断突出显示【英文标题】:Pygments piped to less inside python script breaks highlighting 【发布时间】:2013-01-29 00:02:03 【问题描述】:
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】:

这是 less 的错,不是 Python 的错。使用-R 开关运行less

-R--RAW-CONTROL-CHARS

类似于-r,但只有ANSI“颜色”转义序列以“原始”形式输出。不像-r, 在大多数情况下,屏幕外观保持正确。 ANSI“颜色”转义序列是以下形式的序列:

ESC [ ... m

其中“...”是零个或多个颜色规范字符用于跟踪 屏幕外观,假定 ANSI 颜色转义序列不移动光标。你可以少做 认为“m”以外的字符可以通过设置环境来结束ANSI颜色转义序列 变量 LESSANSIENDCHARS 到可以结束颜色转义序列的字符列表。你可以 减少认为ESC和m之间可能出现标准字符以外的字符 将环境变量 LESSANSIMIDCHARS 设置为可以出现的字符列表。

【讨论】:

以上是关于Pygments 在 python 脚本中通过管道传输到 less 中断突出显示的主要内容,如果未能解决你的问题,请参考以下文章

在 Bash 脚本中通过管道传入/传出剪贴板

在自动 ftp 脚本中通过管道将 stderr 传输到 syslog

在 Apache Spark 中通过管道运行 Windows 批处理文件

cx_Freeze:Python 错误主脚本。找不到模块错误:没有名为 pygments.lexers.python 的模块

用于从该框中通过 SSH 连接到 jumphost 和 sftp 的 Python 脚本

在当前进程中通过 python 运行 bat 文件