使用python子进程时ANSI颜色丢失

Her*_*ert 10 python subprocess

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

ant*_*oft 11

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

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