# The VT escape sequences (ANSI codes) *are* sent to log.txt
# Prints the word "green" in green, both instantly and when calling
# Get-Content log.txt later.
"It ain't easy being $([char] 27)[32mgreen$([char] 27)[m." | Tee-Object log.txt
字符串
注意事项:
在 Windows PowerShell(最高版本5.1)中-至少使用colorama输出- * 空行在通过Tee-Object时会用背景色填充,然后生效 *,因为输出格式化系统会用空格填充输出行。
2条答案
按热度按时间qvsjd97n1#
您的own answer通过
Start-Transcript
展示了一个有效的解决方案。[1]至于你的问题的原因:
不是
Tee-Object
剥离颜色,而是Python脚本本身,大概是因为您用于着色的模块检测到输出没有发送到 screen(终端)。此行为是通过设计实现的:其基本原理是,如果您将某些内容发送到文件或通过管道发送,则您只对原始文本信息感兴趣,而不是颜色。一些Unix实用程序允许您使用命令行选项覆盖此默认行为(例如,GNU
grep
有--color=always
)。coloroma模块似乎也有这样一个覆盖特性(还没有看过
termcolor
),通过它的init()
函数(init(strip=False)
)-但是,您不想将此行为硬连接到您的脚本中,所以也许实现一个类似于GNUgrep
所做的命令行选项是一个选项。以下是
Tee-Object
实际上传递VT(虚拟终端)序列/ ANSI颜色代码的快速演示:字符串
注意事项:
colorama
输出- * 空行在通过Tee-Object
时会用背景色填充,然后生效 *,因为输出格式化系统会用空格填充输出行。[1]该解决方案在 Windows PowerShell 中有效。在PowerShell(Core)中,至少到v7.3.6,
Start-Transcript
* 总是 * 剥离VT/ANSI转义序列,即使$PSStyle.OutputRendering = 'Ansi'
有效。参见GitHub issue #11567进行讨论。e0uiprwp2#
我用Start-Transcript而不是Tee-Object来保存输出,运气不错。
字符串
我不确定是因为Tee-Object剥离了颜色,还是因为Tee-Object不是tty而导致颜色不能正确输出,但这绕过了这两个问题。