Reputation: 30125
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...
Upvotes: 12
Views: 3718
Reputation: 414159
Distutils use sys.gettotalrefcount
to detect a debug python build:
# ...
if hasattr(sys, 'gettotalrefcount'):
plat_specifier += '-pydebug'
*_d.exe
'. It works for any name._d.pyd
' suffix.See Debugging Builds and Misc/SpecialBuilds.txt
Upvotes: 16
Reputation: 2879
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)]
Upvotes: 3
Reputation: 311496
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.
Upvotes: 2