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 -- http://mail.python.org/mailman/listinfo/python-list