Как узнать, идет ли вывод на терминал или нет?

Возможный дубликат:
Определить, является ли stdin терминалом или конвейером в C / C ++ / Qt?

Я хочу знать, идет ли вывод моей программы напрямую на терминал или перенаправляется в конвейер или файл.

Потому что, если он попадает в терминал, я хочу вывести escape-последовательности для создания цветного текста, но в файле или в конвейере это не приветствуется.

Я знаю, что это возможно, потому что «ls» это делает, кто-нибудь знает, как?


person LtWorf    schedule 02.12.2012    source источник
comment
@ Дуглас: Нет, это для C или C ++. Тот факт, что в библиотеке python os есть функция с тем же именем и функцией, не делает этот вопрос дубликатом этого. Здесь может уже быть вопрос Python здесь, на SO, вместо этого обманывайте его.   -  person Martijn Pieters    schedule 02.12.2012
comment
Я заметил тег C, но не тег python, извините за это. (Я действительно наткнулся на этот ответ пока искал обманщика, но продолжал, так как искал С ...)   -  person Douglas    schedule 02.12.2012


Ответы (1)


Используйте os.isatty() функцию в файловом дескрипторе потока stdout или в любом другом другой файл, который нужно протестировать:

>>> import sys, os
>>> os.isatty(sys.stdout.fileno())
True

Для открытых файлов (таких как поток sys.stdout) .fileno() метод возвращает необходимый дескриптор.

person Martijn Pieters    schedule 02.12.2012
comment
Думаю, я могу использовать 1, поскольку это всегда дескриптор файла для stdout. - person LtWorf; 02.12.2012
comment
@LtWorf: Это был бы ярлык, который вы могли бы использовать, да. - person Martijn Pieters; 02.12.2012