2009-03-14 3 views
12

Как я могу обнаружить в моем скрипте python, если его запускает интерпретатор отладки (то есть python_d.exe, а не python.exe)? Мне нужно изменить пути к некоторым dll, которые я передаю в расширение.Python: Как обнаружить интерпретатор отладки

например Id хотел сделать что-то подобное в начале моего питона сценария:

#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()» метод для расширения, который будет возвращать истину, если это отлаживать build (т.е. был построен с «#define DEBUG») и false в противном случае. Но это, кажется, немного хака для Somthing Im уверен, что я могу получить питона, чтобы сказать мне ...

+1

Рассматривали ли вы с использованием исходных строк, чтобы избежать лишнего вытекание? r'bin \ Debug \ direct3d9.dll» – cdleary

ответ

14

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

# ... 
if hasattr(sys, 'gettotalrefcount'): 
    plat_specifier += '-pydebug' 
  • этот метод не зависит от исполняемого имени '*_d.exe'. Он работает для любого имени.
  • Этот метод является кросс-платформенным. Это не зависит от суффикса '_d.pyd'.

См Debugging Builds и Misc/SpecialBuilds.txt

2

простой способ, если вы не возражаете, чтобы полагаться на название файла:

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

You можно узнать больше о модуле sys и его различных объектах here.

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)] 
Смежные вопросы