在powershell中使用Tee-Object时如何保留颜色?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在powershell中使用Tee-Object时如何保留颜色?相关的知识,希望对你有一定的参考价值。
我已经编写了带有彩色输出的python脚本。我有一个Powershell脚本来自动执行并保存其输出,如下所示:
$python = "path opython"
& $python main.py | Tee-Object -FilePath "$logfile"
如果删除Tee-Object部分,则颜色显示得很好。如果很重要:对于颜色输出,我正在使用colorama和termcolor python模块。
有人对如何解决此问题有任何建议吗?
我很幸运,可以使用Start-Transaction保留输出而不是Tee-Object。
Start-Transcript -path "$logfile"
& $python main.py
Stop-Transcript
我不确定Tee-Object是否要去除颜色,或者因为Tee-Object不是tty,所以颜色不能正确输出,但这会绕过任何一个问题。
您的own answer通过Start-Transcript
显示了有效的解决方案。
原因:
不是Tee-Object
去除颜色,而是Python脚本本身,大概是因为用于着色的模块检测到输出没有被发送到屏幕((终端)。
此行为是设计使然:原理是,如果您将某些内容发送到文件或通过管道发送,则只对原始文本信息感兴趣,而对颜色不感兴趣。一些Unix实用程序允许您使用命令行选项覆盖此默认行为(例如,GNU grep
具有--color=always
)。
coloroma模块似乎也通过其.init()
方法具有这样的覆盖功能-但是,您不想将这种行为硬连接到脚本中,因此也许可以实现类似于以下内容的命令行选项GNU grep
的功能是一个选项。
Tee-Object
实际上通过以下方式传递VT(虚拟终端)序列/ ANSI颜色代码的事实的快速演示:
# 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
以上是关于在powershell中使用Tee-Object时如何保留颜色?的主要内容,如果未能解决你的问题,请参考以下文章
简单的 Http 请求在 Visual Studio 中执行时挂起,在 powershell 中工作 [关闭]
在powershell中使用Invoke-WebRequest重定向URL时如何获取位置标头