2009-03-14 6 views
12

Comment puis-je détecter dans mon script python s'il est exécuté par l'interpréteur de débogage (python_d.exe plutôt que python.exe)? J'ai besoin de changer les chemins d'accès à certaines DLL que je passe à une extension.Python: Comment détecter l'interpréteur de débogage

par exemple Id aiment faire quelque chose comme ça au début de mon script 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" 

Je pensais à l'ajout d'une méthode « IsDebug() » à l'extension qui retourne vrai si elle est le débogage build (ie a été construit avec "#define DEBUG") et faux sinon. Mais cela semble un peu un hack pour somthing Im sûr que je peux obtenir python pour me dire ...

+1

Avez-vous envisagé d'utiliser des chaînes premières pour éviter l'excès réchappés? r'bin \ debug \ direct3d9.dll ' – cdleary

Répondre

2

Un moyen facile, si vous ne me dérange pas compter sur le nom du fichier:

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

Vous peut en savoir plus sur le module sys et ses diverses installations here.

3

mieux, parce que cela fonctionne également lorsque vous utilisez un interpréteur Python intégré est de vérifier la valeur de retour de

imp.get_suffixes() 

Pour un débogage construire contient un tuple commençant par « _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)] 
Questions connexes