2012-02-12 31 views
7

Kịch bản asp Sau đây là đem lại cho tôi những lỗi: "HTTP/1.1 500 Server Error"500 Server Error cho Python ASP Script

<%@ Language = Python%> 
<% 
def main(): 
    Response.Write("My first ASP script!") 
main() 
%> 

khi tôi chạy nó trên IIS 7.5 Windows 7 (64 bit). Trong nhật ký lỗi, nó chỉ đơn giản đề cập đến một lỗi ASP_0147.

Tôi đã cài đặt Python 3.2 và Active Python 3.2.2.3 trên máy chủ và đăng ký Python qua: pyscript.py

tôi đã kích hoạt các ứng dụng 32-bit cho máy chủ. Tôi cũng đã cài đặt Python cho Windows để xem điều đó có hữu ích không.

Bạn có thể đề xuất cách khắc phục sự cố này không?

UPDATE:

tôi đã quản lý để có được điều này làm việc ngay bây giờ cho python3 nhưng tôi phải đăng ký với --debug, như sau:

C:\Python32\Lib\site-packages\win32comext\axscript\client>c:\Python32\python.exe 
pyscript.py --debug 
Requesting elevation and retrying... 
Registered: Python (for debugging) 

Tại sao nó chỉ làm việc trong chế độ gỡ lỗi ? Có an toàn để chạy trong chế độ này không?

Dưới đây là các dấu vết khi debug được kích hoạt:

Object with win32trace dispatcher created (object=None) 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-SetScriptSite(<PyIActiveScriptSite at 0x00000000036923B0 with obj at 0x000000000056FFD8>,) [1,0,None] 
Debugging extensions (axdebug) module does not exist - debugging is disabled.. 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._QueryInterface_ with unsupported IID IActiveScriptProperty ({4954E0D0-FBC7-11D1-8410-006008C3FBFC}) 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-InitNew() [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-GetScriptDispatch(None,) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._QueryInterface_ with unsupported IID {1D044690-8923-11D0-ABD2-00A0C911E8B2} ({1D044690-8923-11D0-ABD2-00A0C911E8B2}) 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-AddNamedItem('Response', 66) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-AddNamedItem('Request', 66) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-AddNamedItem('Server', 66) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-AddNamedItem('Session', 66) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-AddNamedItem('Application', 66) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-AddNamedItem('ObjectContext', 66) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-AddNamedItem('ASPGLOBALTLB', 74) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-ParseScriptText('def main():\r\n Response.Write("My first ASP script!")\r\nmain()\r\n', None, None, 'STRIP EMBEDDED HTML COMMENTS', 0, 1, 192, 0) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-GetScriptDispatch(None,) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-AddNamedItem('ScriptingNamespace', 10) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-SetScriptState(1,) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-SetScriptState(0,) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-Close() [1,0,None] 

Cảm ơn,

Barry

+0

Các phép các ứng dụng 32 bit là một o thiết lập n các hồ bơi ứng dụng, nhưng chỉ có liên quan nếu máy chủ của bạn là 64 bit. Một đoạn mã vbscript tương tự có chạy đúng không? –

+0

Có, VBScript hoạt động tốt. – Baz

+0

ASP của bạn có 'Response.Write (" Tập lệnh ASP đầu tiên của tôi! ")', Nhưng dấu vết gỡ lỗi của bạn hiển thị 'Response.Write (" Tập lệnh ASP thứ ba của tôi! ") \ R \ n'. Bạn có thể kiểm tra xem nó có cùng trang hay trang khác không. – user568109

Trả lời

5

Có thể không phải là giải pháp thích hợp, trong quá khứ tôi đã có vấn đề này.
Các phiên bản gần đây của activepython dường như bị hỏng cho hoạt động tập lệnh.
Tôi chỉ có thể sử dụng phiên bản 2.5.6.10.
Nếu phiên bản không quan trọng, bạn có thể thử phiên bản cũ hơn.

+0

Tôi đã đọc một cái gì đó về điều này nhưng tôi vẫn quản lý để làm cho nó hoạt động trên máy WindowsXP của tôi với Python 3.2. – Baz

+0

Mặc dù tôi phải thừa nhận rằng nếu tôi duyệt trong Trình quản lý IIS trên máy tính cửa sổ của mình, tôi nhận được lỗi 500 nếu tôi cố gắng tải trang của mình. Sau đó tôi cần phải khởi động lại iis cho trang web này để trang hoạt động trở lại. – Baz

+0

Tôi hiểu. Mọi nỗ lực của tôi là trên Windows 7. Tôi đã từ bỏ :) Bạn có thể thử đăng ký với 'pyscript.py --debug' và theo dõi bằng Pythonwin.exe. Có lẽ bạn có thể tìm thấy một cái gì đó. –

2

Vấn đề là trace phương pháp và print báo cáo trong win32comext\axscript\client\framework.py bởi vì trong thành phần COM bằng văn bản cho sys.stdout hoặc sys.stderr như báo cáo kết quả print gây ra một ngoại lệ ví dụ trace("Debugging extensions (axdebug) module does not exist - debugging is disabled..") tại dòng 572 của framework.py gây ra một ngoại lệ.

Một giải pháp thay thế là thêm import win32traceutil vào framework.py. win32traceutil chuyển hướng đầu ra thành win32trace remote collector và giải quyết sự cố mà không cần phải bật gỡ lỗi các vấn đề về hiệu suất gây ra phù thủy.

Một cách giải quyết khác là chuyển hướng stdoutstderr thành không, bạn có thể thêm đoạn mã sau ở đầu framework.py.

f = open('nul', 'w') 
    sys.stdout = f 
    sys.stderr = f 

UPDATE: Các nguyên nhân gốc rễ và giải pháp

Đã có một cơ chế trong framework.py để ngăn chặn in ấn và theo dõi báo cáo để nâng cao một ngoại lệ nhưng vấn đề là trong phương pháp write của SafeOutput lớp. Khi truy tìm và gỡ lỗi không được kích hoạt, trong phương thức ghi ngoại lệ xảy ra và win32api.OutputDebugString trong mệnh đề except sẽ gọi với mã hóa sai gây ra một ngoại lệ.Vì chuỗi win32api.OutputDebugString chấp nhận chuỗi Unicode không phải là một bộ ký tự nhiều byte (MBCS) làm đối số.

Giải pháp:

trong win32comext\axscript\client\framework.py trong lớp SafeOutput

class SafeOutput: 
softspace=1 
def __init__(self, redir=None): 
    if redir is None: redir = sys.stdout 
    self.redir=redir 
def write(self,message): 
    try: 
     self.redir.write(message) 
    except: 
     win32api.OutputDebugString(message.encode('mbcs')) 
def flush(self): 
    pass 
def close(self): 
    pass 

chỉ cần thay đổi

win32api.OutputDebugString(message.encode('mbcs')) # ANSI Enconding 

để

win32api.OutputDebugString(message) # Unicode 
Các vấn đề liên quan