コンソール端末に接続されているかどうかを検出する方法はありますか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())" | cat
Falseと書くべき