views:

338

answers:

3

How can I detect in my python script if its being run by the debug interpreter (ie python_d.exe rather than python.exe)? I need to change the paths to some dlls that I pass to an extension.

eg Id like to do something like this at the start of my python script:

#get paths to graphics dlls
if debug_build:
    d3d9Path   = "bin\\debug\\direct3d9.dll"
    d3d10Path  = "bin\\debug\\direct3d10.dll"
    openGLPath = "bin\\debug\\openGL2.dll"
else:
    d3d9Path   = "bin\\direct3d9.dll"
    d3d10Path  = "bin\\direct3d10.dll"
    openGLPath = "bin\\openGL2.dll"

I thought about adding an "IsDebug()" method to the extension which would return true if it is the debug build (ie was built with "#define DEBUG") and false otherwise. But this seems a bit of a hack for somthing Im sure I can get python to tell me...

+1  A: 

An easy way, if you don't mind relying on the file name:

if sys.executable.endswith("_d.exe"):
  print "running on debug interpreter"

You can read more about the sys module and its various facilities here.

John Feminella
+3  A: 

Better, because it also works when you are running an embedded Python interpreter is to check the return value of

imp.get_suffixes()

For a debug build it contains a tuple starting with '_d.pyd':

# debug build:
[('_d.pyd', 'rb', 3), ('.py', 'U', 1), ('.pyw', 'U', 1), ('.pyc', 'rb', 2)]

# release build:
[('.pyd', 'rb', 3), ('.py', 'U', 1), ('.pyw', 'U', 1), ('.pyc', 'rb', 2)]
theller
+5  A: 

Distutils use sys.gettotalrefcount to detect a debug python build:

# ...
if hasattr(sys, 'gettotalrefcount'):
   plat_specifier += '-pydebug'
  • this method doesn't rely on an executable name '*_d.exe'. It works for any name.
  • this method is cross-platform. It doesn't depend on '_d.pyd' suffix.

See Debugging Builds and Misc/SpecialBuilds.txt

J.F. Sebastian