Для CMake, в частности, вы можете принудительно заставить выводить цвет, используя опцию CLICOLOR_FORCE=1
:
command = 'make CLICOLOR_FORCE=1'
args = shlex.split(command)
proc = subprocess.Popen(args, stdout=subprocess.PIPE)
Затем распечатать как в принятом ответе :
while proc.poll() is None:
output = proc.stdout.readline()
print(output.decode('utf-8'))
Если вы декодируете в utf-8 перед печатью, вы должны увидеть цветной вывод.Если вы печатаете результат в виде байтового литерала (то есть без декодирования), вы должны увидеть escape-последовательности для различных цветов.
Попробуйте использовать опцию universal_newlines=True
:
proc = subprocess.Popen(args, stdout=subprocess.PIPE, universal_newlines=True)
Thisзаставляет вызов proc.stdout.readline()
возвращать строку вместо байтового литерала, поэтому вы можете / должны пропустить вызов на decode()
.