How do I tell if I'm running under IDLE?

Tim Chase python.list at tim.thechases.com
Fri Apr 5 10:33:42 EDT 2013


On 2013-04-05 13:37, Steven D'Aprano wrote:
> On Fri, 05 Apr 2013 07:04:35 -0400, Dave Angel wrote:
> 
> > On 04/05/2013 05:30 AM, Steven D'Aprano wrote:
> >> (Apologies in advance if you get multiple copies of this. My
> >> Usenet connection seems to be having a conniption fit at the
> >> moment.)
> >>
> >> I'm looking for an official way to tell what interpreter (if
> >> any) is running, or at least a not-too-horrible unofficial way.
> [...]
> >> Ideally, I'd like to detect any arbitrary environment such as
> >> Spyder, IPython, BPython, etc., but will settle for just IDLE.
> >
> > Are you open to OS-specific techniques?  For example, on Linux,
> > you could learn things from ps aux.
> 
> I'd prefer a pure-Python solution, but if the choice is between an 
> accurate solution using an external tool, and an inaccurate Python 
> heuristic, I'm willing to use external tools.

If you're looking for a heuristic, you might take a look at whether
there are bunch of entries in sys.modules that start with
"idlelib".  There seem to be a bunch when tested in the IDLE Python
shell. You could set some low-water mark to suggest that IDLE is
loaded, and take the count:

  import sys
  IDLE_LOW_WATER_MARK = min([
    49, # Python 2.4 on WinXP
    55, # Python 2.6 on Linux
    22, # Python 3.1 on Linux
    # I seem to recall you have oodles of other
    # versions installed that you can test
    # to find a good low-water mark
    ])
  idle_module_count = sum([
    1 for m in sys.modules
    if m.startswith("idlelib.") or m == "idlelib"
    ])
  print("Found %i idlelib module(s), hunting %i" %
    idle_module_count, IDLE_LOW_WATER_MARK)
  if idle_module_count >= IDLE_LOW_WATER_MARK:
    print("Hey, it looks like we're running in IDLE")
  else:
    print("I'm pretty sure we're not running in IDLE")

It doesn't stop you from manually importing IDLE_LOW_WATER_MARK
modules into your own code, but then you just get to keep the pieces
when it breaks that way ;-)

-tkc







More information about the Python-list mailing list