detect interactivity

Roald de Vries rdv at roalddevries.nl
Tue Dec 29 21:33:18 EST 2009


On Dec 30, 2009, at 2:28 AM, Dave Angel wrote:

> 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???

I'm using a database, and want to use python interactively to  
manipulate it. On the other hand, I also want to be able to use it non- 
interactively. In that case, it would be a waste of CPU to load the  
function/class definitions meant for interactive use.






More information about the Python-list mailing list