How to tell if python script is being run in a terminal or via GUI? How to tell if python script is being run in a terminal or via GUI? shell shell

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.