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

Есть ли способ определить, прикреплен ли sys.stdout к консольному терминалу или нет? Например, я хочу, чтобы определить, выполняется ли foo.py через:

$ python foo.py  # user types this on console

ИЛИ

$ python foo.py > output.txt # redirection
$ python foo.py | grep ....  # pipe

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

Ответ 1

if sys.stdout.isatty():
    # You're running in a real terminal
else:
    # You're being piped or redirected