Reputation: 3550
I've noticed that curl can tell whether or not I'm redirecting its output (in which case it puts up a progress bar).
Is there a reasonable way to do this in a Python script? So:
$ python my_script.py
Not redirected
and
$ python my_script.py > output.txt
Redirected!
Upvotes: 26
Views: 4991
Reputation: 146093
Actually, what you want to do here is find out if stdin
and stdout
are the same thing.
$ cat test.py
import os
print(os.fstat(0) == os.fstat(1))
$ python test.py
True
$ python test.py > f
$ cat f
False
$
The longer but more traditional version of the are they the same file test just compares st_ino
and st_dev
. Typically, on windows these are faked up with a hash of something so that this exact design pattern will work.
Upvotes: 16
Reputation: 222922
import sys
if sys.stdout.isatty():
print("Not redirected")
else:
sys.stderr.write("Redirected!\n")
Upvotes: 50
Reputation: 86774
Look at
os.isatty(fd)
(I don't think this works on Windows, however)
Upvotes: 4