Python:如何检测调试解释器

12

我该如何在我的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告诉我...


1
你是否考虑使用原始字符串来避免过多的转义?r'bin\debug\direct3d9.dll' - cdleary
3个回答

15

3
这是一个旧回答,但我来自未来的人在这里确认,在Python 3.7.1上仍然可以正常运行。 - geometrian
这是一个单行示例:这是一个Bash测试: PYTHON_DEBUG= ; else: PYTHON_DEBUG="y" fi - myselfhimself
抱歉,请删除 Bash 示例中的方括号以使其正常工作。 - myselfhimself

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

如果您不介意依赖文件名,有一个简单的方法:

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

您可以在此处了解有关sys模块及其各种功能的更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接