title: Detecting when a python script is being run interactively in ipython
body: <p>Is there a way for a python script to automatically detect whether it is being run interactively or not?  Alternatively, can one detect whether ipython is being used versus the regular c python executable?</p>
  
  <p>Background: My python scripts generally have a call to exit() in them.  From time to time, I run the scripts interactively for debugging and profiling, usually in ipython.  When I'm running interactively, I want to suppress the calls to exit.  </p>
  
  <p><strong>Clarification</strong>: </p>
  
  <p>Suppose I have a script, myscript.py, that looks like:</p>
  
  <pre><code>#!/usr/bin/python
  ...do useful stuff...
  exit(exit_status)
  </code></pre>
  
  <p>Sometimes, I want to run the script within an IPython session that I have already started, saying something like:</p>
  
  <pre><code>In [nnn]: %run -p -D myscript.pstats myscript.py
  </code></pre>
  
  <p>At the end of the script, the exit() call will cause ipython to hang while it asks me if I really want to exit.  This is a minor annoyance while debugging (too minor for me to care), but it can mess up profiling results: the exit prompt gets included in the profile results (making the analysis harder if I start a profiling session before going off to lunch).  </p>
  
  <p>What I'd like is something that allows me modify my script so it looks like:</p>
  
  <pre><code>#!/usr/bin/python
  ...do useful stuff...
  if is_python_running_interactively():
      print "The exit_status was %d" % (exit_status,)
  else:
      exit(exit_status)
  </code></pre>