Как определить, поддерживает ли консоль escape-коды ANSI в Python?

Чтобы определить, правильно ли работает консоль sys.stderr или sys.stdout , я проводил следующий тест:

if hasattr(sys.stderr, "isatty") and sys.stderr.isatty():
   if platform.system()=='Windows':
       # win code (ANSI not supported but there are alternatives)
   else:
       # use ANSI escapes
else:
   # no colors, usually this is when you redirect the output to a file

Теперь проблема усложнилась при запуске этого кода Python через IDE (например, PyCharm). Недавно PyCharm добавил поддержку ANSI, но первый тест не прошел: у него есть атрибут isatty , но для него установлено значение False .

Я хочу изменить логику, чтобы она правильно определяла, поддерживает ли вывод раскраску ANSI. Одно из требований состоит в том, что ни при каких обстоятельствах я не должен выводить что-либо, когда вывод перенаправляется в файл (для консоли это было бы приемлемо).

Обновление

Добавлен более сложный тестовый сценарий ANSI по адресу https://gist.github.com/1316877

32
задан sorin 26 October 2011 в 16:27
поделиться