1. ホーム
  2. python

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

2022-04-25 19:30:44

質問

<余談
この質問には、すでにここで回答があります :
クローズド 8年前 .

を検出する方法はありますか? sys.stdout がコンソールターミナルに接続されているかどうか?例えば、foo.pyが経由で実行されたかどうかを検出できるようにしたいのです。

$ python foo.py  # user types this on console

オア

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

この質問をする理由は、プログレスバーの表示が前者の場合(リアルコンソール)にのみ起こるようにしたいからです。

どのように解決するのですか?

を使用して検出することができます。 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を書くべき