【问题标题】:ANSI color lost when using python subprocess [closed]使用python子进程时ANSI颜色丢失[关闭]
【发布时间】:2017-07-24 04:41:26
【问题描述】:

我正在尝试在另一个 python 进程中运行一个进程。我正常运行的程序在 ANSI 终端仿真器中运行时具有彩色输出。当我让我的控制 python 程序打印子进程的输出时,我看不到任何颜色。当我从中读取并打印到屏幕时,子进程的颜色会丢失。 print(subp.stdout.readline())

【问题讨论】:

标签: python subprocess


【解决方案1】:

产生颜色输出的进程通过将转义码发送到与输出混合的终端(-emulator)来实现。将这些程序的输出作为数据处理的程序会被转义码混淆,因此大多数在终端上产生颜色输出的程序只有在写入终端设备时才会这样做。如果程序的标准输出连接到管道而不是终端设备,它们不会产生转义码。当 Python 读取子进程的输出时,它是通过管道进行的,因此您在子进程中调用的程序不会输出转义码。

如果您对输出所做的只是将其发送到终端,您可能需要转义码以保留颜色。无论输出设备如何,您的程序都可能有一个命令行开关来输出转义码。如果没有,您可能会针对虚拟终端设备而不是管道运行子进程以使其输出转义码;这是一个太复杂的话题,无法在此答案中深入探讨。

【讨论】:

  • 谢谢。我不明白这句话“如果你对输出所做的只是将它发送到终端,你可能需要转义码以便保留颜色”。您的意思是转义 ANSI 颜色代码吗?
  • @Herbert -- 如果您正在获取进程的输出并将其写入终端,并且想要查看颜色输出,则需要包含转义码。
  • 子进程是一个tcl脚本。我尝试使用 stdout = sys.stdout 而不是 stdout = PIPE 打开子进程。这使它保持颜色。我认为我无法更改 tcl 中打印功能的行为方式。那么你能告诉我如何将输出定向到虚拟终端的链接吗?谢谢。
  • @Herbert - Tcl 做到这一点的方法是期望;有一个名为 pexpect 的 python 模块应该做同样的事情。不过,我不知道更多细节。 pexpect.readthedocs.io
猜你喜欢
  • 2011-12-30
  • 1970-01-01
  • 2021-10-26
  • 2016-05-06
  • 2013-08-16
  • 2015-08-27
  • 1970-01-01
  • 2013-07-19
  • 2021-12-06
相关资源
最近更新 更多