У меня есть простой Python script, который использует escape-последовательности ANSI, чтобы иметь цветной вывод на терминале.
И это отлично работает, но когда вывод используется в другом месте (например, в VIM), все последовательности ANSI отображаются, и это делает его действительно нечитаемым.
Например, для отображения RED я делаю что-то вроде:
^[[91m Errors:
-------^[[0m
Это прекрасно читается в терминале.
Я мог бы добавить флаг в свой инструмент командной строки Python, чтобы не отображать эти символы, когда мне нужно иметь дело с выходом, но мне было интересно, есть ли способ иметь цветной вывод без помех вывода.
Решение должно было бы использовать Python Stdlib или не нужно было устанавливать стороннюю библиотеку.
Однако я совершенно нормально, если подход не работает в Windows:)
Вы можете использовать os.isatty
с дескриптором файла stdout
, который можно получить, вызвав fileno
на sys.stdout
.
Изменить: Похоже, что файлы также имеют метод isatty
; поэтому вы можете избежать использования модуля os
и просто использовать sys.stdout.isatty()
.
Посмотрите на этот ответ, который охватывает именно то, что вы просите
Как определить, подключен ли sys.stdout к терминалу или нет?
system
вызова VIM, и я не уверен, что это на самом деле «перенаправление» вывода.