如何在我的python脚本中检测它是否由调试解释器(即python_d.exe而不是python.exe)运行?我需要改变传递给扩展的一些dll的路径。
例如我喜欢在我的python脚本开头做类似的事情:
#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"
我考虑过向扩展添加“IsDebug()”方法,如果它是调试版本(即使用“#define DEBUG”构建),则返回true,否则返回false。但这对于某些事情来说似乎有点骇人听闻我确定我可以让python告诉我......
答案 0 :(得分:14)
Distutils use sys.gettotalrefcount
to detect a debug python build:
# ...
if hasattr(sys, 'gettotalrefcount'):
plat_specifier += '-pydebug'
*_d.exe
”。它适用于任何名称。_d.pyd
”后缀。答案 1 :(得分:3)
更好,因为它在运行嵌入式Python解释器时也可以检查
的返回值imp.get_suffixes()
对于调试版本,它包含一个以'_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)]
答案 2 :(得分:2)
一种简单的方法,如果您不介意依赖文件名:
if sys.executable.endswith("_d.exe"):
print "running on debug interpreter"
您可以详细了解sys
模块及其各种设施here。