如何在执行 subprocess.Popen 时保留 shell 输出的原始颜色编码?
How to preserve original color coding of output on the shell while doing a subprocess.Popen?
我有一个简单的 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 脚本,它会给出输出 uncolored.
subprocess.Popen
是否有参数可以保留 shell 的颜色编码运行?
PS:
我在安装了 Python 3.9.0 的 MacOS bash shell 上 运行ning 这个 Python 脚本。
很多程序会检测自己是否连接到终端,并切换到不同的行为以供交互使用。
一些选项提供了强制交互功能的选项(尝试 ls --color=always
但具体效果取决于您的平台;这不是标准化行为。macOS ls
man page 表示在环境)和其他人可以通过使用 pty
库或 pexpect
这是一个更高级别的包并且更容易使用 [=16] =]
我有一个简单的 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 脚本,它会给出输出 uncolored.
subprocess.Popen
是否有参数可以保留 shell 的颜色编码运行?
PS:
我在安装了 Python 3.9.0 的 MacOS bash shell 上 运行ning 这个 Python 脚本。
很多程序会检测自己是否连接到终端,并切换到不同的行为以供交互使用。
一些选项提供了强制交互功能的选项(尝试 ls --color=always
但具体效果取决于您的平台;这不是标准化行为。macOS ls
man page 表示在环境)和其他人可以通过使用 pty
库或 pexpect
这是一个更高级别的包并且更容易使用 [=16] =]