Как отобразить цвета ANSI в выводе скрипта Python, работающем под Unix

1

У меня есть простой Python script, который использует escape-последовательности ANSI, чтобы иметь цветной вывод на терминале.

И это отлично работает, но когда вывод используется в другом месте (например, в VIM), все последовательности ANSI отображаются, и это делает его действительно нечитаемым.

Например, для отображения RED я делаю что-то вроде:

^[[91m Errors:
-------^[[0m

Это прекрасно читается в терминале.

Я мог бы добавить флаг в свой инструмент командной строки Python, чтобы не отображать эти символы, когда мне нужно иметь дело с выходом, но мне было интересно, есть ли способ иметь цветной вывод без помех вывода.

Решение должно было бы использовать Python Stdlib или не нужно было устанавливать стороннюю библиотеку.

Однако я совершенно нормально, если подход не работает в Windows:)

  • 0
    Возможный дубликат Как распознать, работает ли скрипт на tty?
  • 0
    вопрос определенно не дубликат, но решение такое же :) Люди, которые ищут (ищут) проблему, похожую на мою, могут не знать, что ответ такой же, как и тот, на который вы указываете (поскольку это разные вопросы) ,
Теги:
terminal
ansi-escape

2 ответа

3
Лучший ответ

Вы можете использовать os.isatty с дескриптором файла stdout, который можно получить, вызвав fileno на sys.stdout.

Изменить: Похоже, что файлы также имеют метод isatty; поэтому вы можете избежать использования модуля os и просто использовать sys.stdout.isatty().

  • 0
    Это сделало это спасибо. Это просто логическое значение, так что это идеально.
1

Посмотрите на этот ответ, который охватывает именно то, что вы просите

Как определить, подключен ли sys.stdout к терминалу или нет?

  • 0
    Я думаю, что это может быть сложно (но я хочу попробовать). Вывод происходит из system вызова VIM, и я не уверен, что это на самом деле «перенаправление» вывода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню