2009-03-14 15 views
12

¿Cómo puedo detectar en mi secuencia de comandos python si está siendo ejecutado por el intérprete de depuración (es decir, python_d.exe en lugar de python.exe)? Necesito cambiar los caminos a algunos dlls que paso a una extensión.Python: cómo detectar el intérprete de depuración

por ejemplo, identificación tiene gusto de hacer algo como esto en el inicio de mi script en 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" 

pensé en añadir un método "isDebug()" para la extensión que sería devolver verdadero si es la depuración construir (es decir, se construyó con "#define DEBUG") y de lo contrario es falso. Pero esto parece un poco de un corte para somthing Estoy seguro de que puedo conseguir pitón me diga ...

+1

¿Usted ha considerado el uso de cadenas primas para evitar el exceso de escape? r'bin \ debug \ direct3d9.dll ' – cdleary

Respuesta

2

Una manera fácil, si no le importa confiar en el nombre de archivo:

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

Usted Puede leer más sobre el módulo sys y sus diversas instalaciones here.

3

mejor, ya que también funciona cuando se está ejecutando un intérprete de Python incrustado es comprobar el valor de retorno de

imp.get_suffixes() 

Para una depuración construirlo contiene una tupla que empiezan con '_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)] 
Cuestiones relacionadas