如何检测sys.stdout是否连接到terminal?

有没有办法来检测sys.stdout是否连接到控制台terminal? 例如,我希望能够检测foo.py是否通过以下方式运行:

 $ python foo.py # user types this on console 

要么

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

我问这个问题的原因是我想确保我的进度条显示只发生在前一种情况下(真正的控制台)。

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