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