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.



--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to