代码之家  ›  专栏  ›  技术社区  ›  TheWaterProgrammer

如何在执行subprocess.Popen时在shell上保留输出的原始颜色编码?

  •  1
  • TheWaterProgrammer  · 技术社区  · 4 年前

    #!/usr/bin/env python3
    import subprocess
    
    def RunSubProcess(process, process_args):
        process = subprocess.Popen([process, process_args], 
                                   stdout=subprocess.PIPE, 
                                   stderr=subprocess.PIPE, 
                                   universal_newlines=True)
        while process.stdout.readable():
            line = process.stdout.readline()
            if not line:
                break
            print(line.strip())
    
    RunSubProcess('ls', '-la')
    

    ls -la ,我得到的输出颜色良好。但是如果我运行上面的Python脚本,它会给出输出 联合国 有色的。

    subprocess.Popen 可以保留它运行的外壳的颜色编码吗?

    附言:

    1 回复  |  直到 4 年前
        1
  •  2
  •   tripleee    4 年前

    许多程序检测它们是否连接到终端,并切换到不同的行为进行交互使用。

    有些提供强制交互功能的选项(请尝试 ls --color=always macOS ls man page 说要设置 CLICOLOR=yes 在环境中)和其他人可能会被愚弄到相信他们是通过使用 pty 图书馆,或 pexpect 这是一个更高层次的软件包,更容易使用。