2009-03-14 47 views
12

Làm cách nào để phát hiện trong tập lệnh python của tôi nếu nó được chạy bởi trình thông dịch gỡ lỗi (tức là python_d.exe chứ không phải python.exe)? Tôi cần phải thay đổi đường dẫn đến một số dll mà tôi vượt qua để mở rộng.Python: Cách phát hiện trình thông dịch gỡ lỗi

ví dụ Id muốn làm một cái gì đó như thế này vào lúc bắt đầu của kịch bản python của tôi:

#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" 

Tôi nghĩ về việc thêm một "IsDebug()" phương pháp để mở rộng đó sẽ trở thành sự thật nếu nó là debug xây dựng (tức là được xây dựng với "#define DEBUG") và sai khác. Nhưng điều này có vẻ hơi của một hack cho somthing Im chắc chắn tôi có thể nhận python cho tôi biết ...

+1

Bạn đã xem là sử dụng chuỗi nguyên để tránh thoát dư thừa? r'bin \ debug \ direct3d9.dll ' – cdleary

Trả lời

2

Một cách dễ dàng, nếu bạn không nhớ dựa vào tên file:

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

Bạn có thể đọc thêm về mô-đun sys và các cơ sở khác nhau của nó here.

3

tốt hơn, bởi vì nó cũng làm việc khi bạn đang chạy một thông dịch Python nhúng là để kiểm tra giá trị trả về của

imp.get_suffixes() 

Đối với một debug xây dựng nó chứa một tuple bắt đầu bằng '_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)] 
Các vấn đề liên quan