gpt4 book ai didi

python - 在 powershell 中使用 Tee-Object 时如何保留颜色?

转载 作者:行者123 更新时间:2023-12-02 23:06:53 26 4
gpt4 key购买 nike

我编写了一个带有彩色输出的 python 脚本。我有一个 powershell 脚本来自动执行它并保存它的输出,如下所示:

$python = "path\to\python"
& $python main.py | Tee-Object -FilePath "$logfile"

如果我移除 Tee-Object 部分,颜色会很好地显示出来。以防万一:对于颜色输出,我使用的是 colorama 和 termcolor python 模块。

有没有人对如何解决这个问题有任何建议?

最佳答案

你的 own answer通过 Start-Transcript 显示了一个有效的解决方案.

至于你的问题的原因:

剥离颜色的不是 Tee-Object,而是 Python 脚本本身,大​​概是因为您的模块用于着色检测输出未发送到屏幕(终端)

此行为是设计使然:基本原理是,如果您将某些内容发送到文件或通过管道发送,您只对原始文本信息感兴趣,而不是着色。一些 Unix 实用程序允许您使用命令行选项覆盖此默认行为(例如,GNU grep 具有 --color=always)。

coloroma模块似乎也有这样的覆盖功能(还没有看过 termcolor),通过它的 init() 函数(init(strip=False)) - 但是,您不想将此行为硬连接到您的脚本中,因此也许可以选择实现类似于 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

警告:

  • Windows PowerShell(最高版本 5.1)中 - 至少有 colorama 输出 - 空行用背景色填充,然后在当它们通过 Tee-Object 时效果,因为输出格式化系统用空格填充输出行。

  • PowerShell [Core] 7+ 不再有此问题。

关于python - 在 powershell 中使用 Tee-Object 时如何保留颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61171577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com