Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Can I check if I'm running from the interpreter prompt?

5 views
Skip to first unread message

sk...@pobox.com

unread,
Nov 14, 2008, 11:13:14 AM11/14/08
to pytho...@python.org
Is there a reliable way (this is on Solaris if that matters) to tell if I'm
running in the interactive interpreter as opposed to in a script? I think
examining sys.argv works, but wanted to double check.

Thx,

Skip

Scott David Daniels

unread,
Nov 14, 2008, 3:36:08 PM11/14/08
to

import sys, traceback

try:
raise ValueError
except ValueError:
start = traceback.extract_tb(sys.exc_info()[2])[-1]

Start should show you where the program is being run from.


--Scott David Daniels
Scott....@Acm.Org

Peter Otten

unread,
Nov 14, 2008, 4:49:35 PM11/14/08
to
sk...@pobox.com wrote:

hasattr(sys, "ps1")

http://www.python.org/doc/2.5.2/lib/module-sys.html#l2h-5167

"""
ps1
ps2
Strings specifying the primary and secondary prompt of the interpreter.
These are only defined if the interpreter is in interactive mode.
"""

sk...@pobox.com

unread,
Nov 14, 2008, 6:48:31 PM11/14/08
to Peter Otten, pytho...@python.org

Peter> hasattr(sys, "ps1")

Thanks. I wasn't aware there was a documented way to check for
interactivity. It would have been more obvious if sys had an
"isinteractive" method or attribute.

--
Skip Montanaro - sk...@pobox.com - http://smontanaro.dyndns.org/

alex23

unread,
Nov 14, 2008, 10:11:23 PM11/14/08
to
On Nov 15, 9:48 am, s...@pobox.com wrote:
> Thanks.  I wasn't aware there was a documented way to check for
> interactivity.  

That's more of a side-effect than the actual intent of those
attributes, which are there to hold the interpreter prompts. But it
does seem to be the only way.

It might be worth noting that this -doesn't- hold true for iPython:

IPython 0.9.1 -- An enhanced Interactive Python.
[...]
In [1]: import sys
In [2]: hasattr(sys, 'ps1')
Out[2]: False

> It would have been more obvious if sys had an
> "isinteractive" method or attribute.

You could add the following to your sitecustomize.py:

sys.isinteractive = hasattr(sys, 'ps1')

If you want to check for iPython as well:

sys.isinteractive = hasattr(sys, 'ps1') or hasattr(sys,
'ipcompleter')

Message has been deleted
0 new messages