Is there a way to detect whether sys.stdout is attached to a console terminal or not? For example, I want to be able to detect if foo.py is run via:
$ python foo.py # user types this on console
OR
$ python foo.py > output.txt # redirection $ python foo.py | grep .... # pipe
The reason I ask this question is that I want to make sure that my progressbar display happens only in the former case (real console).
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
This can be detected using isatty:
if sys.stdout.isatty():
# You're running in a real terminal
else:
# You're being piped or redirected
To demonstrate this in a shell:
python -c "import sys; print(sys.stdout.isatty())"should write Truepython -c "import sys; print(sys.stdout.isatty())" | catshould write False
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0