How to tell if python script is being run in a terminal or via GUI?
$ echo ciao | python -c 'import sys; print sys.stdin.isatty()'False
Of course, your GUI-based IDE might choose to "fool" you by opening a pseudo-terminal instead (you can do it yourself to other programs with pexpect, and, what's sauce for the goose...!-), in which case isatty
or any other within-Python approach cannot tell the difference. But the same trick would also "fool" your example bash
program (in exactly the same way) so I guess you're aware of that. OTOH, this will make it impossible for the program to accept input via a normal Unix "pipe"!
A more reliable approach might therefore be to explicitly tell the program whether it must output to stdout
or where else, e.g. with a command-line flag.
I scoured SE for an answer to this but everywhere indicated the use of sys.stdout.isatty()
or os.isatty(sys.stdout.fileno())
. Neither of these dependably caught my GUI test cases.
Testing standard input was the only thing that worked for me:
sys.stdin.isatty()
There are several examples of this on PLEAC which counts for a third case: running at an interactive Python prompt.