你能让 subprocesss.Popen 在 stdout/stderr 中保留颜色吗?

Can you have subprocesss.Popen retain color in stdout/stderr?

我有以下代码:

p = subprocess.Popen(cmd.split(' '), env=os.environ, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    while(True):
      log.info(p.stdout.readline())
      if(p.poll() is not None):
        break

除了它删除了所有发出的颜色之外,它工作正常。有办法保留这个吗?

您没有指定 cmd 是什么,但是某些程序在确定其标准输出实际上未连接到终端时不会发出终端上彩色输出所必需的 escape sequences .

根据程序的不同,您可能会或可能不会覆盖它。

使用 ansible,您可以将 force_color 配置变量设置为 1 以强制输出颜色。

在 Python 脚本的顶部添加以下内容。

import os
os.environ['ANSIBLE_FORCE_COLOR'] = "TRUE"

现在,如果您使用 subprocess.Popen 来自 Python 的 Ansible 运行,它将打印颜色。