我想在另一个Python进程内运行一个程序。这个程序在ANSI终端模拟器中运行时通常会有着彩色的输出。但当我让控制的Python程序来打印子进程的输出时,就看不到任何颜色了。在读取并输出到屏幕时,从子进程中获取的颜色信息丢失了。
print(subp.stdout.readline())
我想在另一个Python进程内运行一个程序。这个程序在ANSI终端模拟器中运行时通常会有着彩色的输出。但当我让控制的Python程序来打印子进程的输出时,就看不到任何颜色了。在读取并输出到屏幕时,从子进程中获取的颜色信息丢失了。
print(subp.stdout.readline())
产生彩色输出的进程会在输出中混合发送转义码到终端(仿真器),程序处理这些数据时可能会因转义码而困惑。因此,大多数在终端上产生彩色输出的程序只有在写入终端设备时才会这样做。如果程序的标准输出连接到管道而不是终端设备,则不会产生转义码。当Python读取子进程的输出时,它通过一个管道来完成,因此你在子进程中调用的程序不会输出转义码。
如果你只是将输出发送到终端,则可能需要转义码以保留颜色。你的程序可能有一个命令行开关来输出转义码,而不考虑输出设备。如果没有,你可以运行子进程针对虚拟终端设备而不是管道,以便它输出转义码;但这是一个过于复杂的话题,无法在此回答中详细介绍。