我有一个简单的 Python 脚本,它实时打印命令的输出。以下是脚本:
#!/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')
该脚本可以很好地完成它应该做的事情,但它在我的 shell 上丢失了输出的颜色编码。如果我输入 ls -la
,我得到的输出颜色很好。但是如果我运行上面的 Python 脚本,它会给出输出 联合国 有色。对
subprocess.Popen
有争论吗?可以保留它运行的 shell 的颜色编码吗?PS:
我在安装了 Python 3.9.0 的 MacOS 上的 bash shell 上运行这个 Python 脚本。
最佳答案
许多程序会检测自己是否连接到终端,并切换到不同的行为进行交互使用。
有些提供了强制交互功能的选项(尝试 ls --color=always
但究竟什么有效取决于您的平台;这不是标准化行为。macOS ls
man page 说在环境中设置 CLICOLOR=yes
)而其他人可能会被愚弄相信他们是使用 pty
交互运行图书馆,或 pexpect
这是一个更高级别的包,更容易使用。
关于python - 如何在执行 subprocess.Popen 时保留外壳上输出的原始颜色编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67710641/