sys.stdout がターミナルに接続されているかどうかを検出するにはどうすればよいですか? [重複] 質問する

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

これは、isatty:

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

これをシェルで実証するには:

  • python -c "import sys; print(sys.stdout.isatty())"Trueと書くべき
  • python -c "import sys; print(sys.stdout.isatty())" | catFalseと書くべき

おすすめ記事