systemctl
проверяет, куда идет выход; если это tty, он показывает цветной вывод. Если STDOUT не привязан к tty, он не показывает цвет.
Итак, по сути, вам нужно сделать это из источника, т.е. заставить systemctl
выдавать необходимые escape-коды, когда STDOUT не является tty.
Есть способ, от man systemd
:
$SYSTEMD_COLORS
Controls whether colorized output should be generated.
Таким образом, вам нужно передать переменную окружения SYSTEMD_COLORS
, чтобы systmectl
возвращал выходные данные с экранированием цвета.
Вы можете сделать:
os.environ['SYSTEMD_COLORS'] = '1'
subprocess.run(['systemctl', 'status', 'application'], stdout=subprocess.PIPE)
Чтобы иметь env var для этой команды, выполните только del os.environ['SYSTEMD_COLORS']
.
Или запустить на оболочке напрямую только для одной команды:
subprocess.run('SYSTEMD_COLORS=1 systemctl status application', shell=True, stdout=subprocess.PIPE)