detect interactivity

Dave Angel davea at ieee.org
Tue Dec 29 20:28:52 EST 2009


Roald de Vries wrote:
> On Dec 29, 2009, at 8:34 PM, Dave Angel wrote:
>> Antoine Pitrou wrote:
>>> Le Tue, 29 Dec 2009 16:09:58 +0100, Roald de Vries a écrit :
>>>
>>>
>>>> Dear all,
>>>>
>>>> Is it possible for a Python script to detect whether it is running
>>>> interactively? It can be useful for e.g. defining functions that are
>>>> only useful in interactive mode.
>>>>
>>>
>>> Try the isatty() method (*) on e.g. stdin:
>>>
>>> $ python -c "import sys; print sys.stdin.isatty()"
>>> True
>>> $ echo "" | python -c "import sys; print sys.stdin.isatty()"
>>> False
>>>
>> Your test determines whether input is redirected.  But I think the OP 
>> was asking how to detect whether the script was being run from an 
>> interpreter prompt.
>
> That was my question indeed. Is it possible?
>
>
If I had had a good answer, I would have supplied it in my earlier message.

The sneaky answer would be that a script cannot be used interactively, 
as once you import it from the interpreter, it's a module, not a 
script.  So you can detect that it's not a script, by examing __name__ 
in the usual way.  If it's a script, it'll have a value of "__main__".

But that won't tell you if you're running inside an IDE, or using the -i 
switch on the Python command line, or probably a bunch of other 
questions.  I don't know of any "correct" answer, and I'm not sure what 
the real use case is for knowing.  Are you really going to somehow 
define a different set of functions???

But I'm sure someone else will know something more explicitly tied to 
the interactive session.  If that's indeed what you want to test for.

DaveA




More information about the Python-list mailing list