By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,767 Members | 1,995 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,767 IT Pros & Developers. It's quick & easy.

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

P: n/a
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
Nov 14 '08 #1
Share this Question
Share on Google+
4 Replies


P: n/a
sk**@pobox.com wrote:
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.
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
Sc***********@Acm.Org
Nov 14 '08 #2

P: n/a
sk**@pobox.com wrote:
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.
hasattr(sys, "ps1")

http://www.python.org/doc/2.5.2/lib/....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.
"""

Nov 14 '08 #3

P: n/a

Peterhasattr(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/
Nov 14 '08 #4

P: n/a
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')
Nov 15 '08 #5

This discussion thread is closed

Replies have been disabled for this discussion.