2012-02-12 9 views
7

Poniższy skrypt asp daje mi błąd: "HTTP/1.1 500 Server Error"500 Błąd serwera dla Pythona w skrypcie ASP

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

gdy uruchomię go na IIS 7.5 w systemie Windows 7 (64 bit). W dzienniku błędów po prostu wspomina o błędzie ASP_0147.

Mam zainstalowany Python 3.2 i Active Python 3.2.2.3 na serwerze i zarejestrowany Python poprzez: pyscript.py

mam włączone aplikacje 32-bitowe dla serwera. Zainstalowałem także Python dla Windows, aby sprawdzić, czy to pomoże.

Czy możesz zasugerować, w jaki sposób mogę to naprawić?

UPDATE:

udało mi się dostać ten pracuje teraz dla python3 ale muszę zarejestrować się --debug, co następuje:

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

Dlaczego to będzie działać tylko w trybie debugowania ? Czy korzystanie z tego trybu jest bezpieczne?

Oto ślad podczas debugowania jest włączona:

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] 

Dzięki

Barry

+0

enable aplikacji 32 bitowe jest ustawienie aO n w puli aplikacji, ale tylko istotne, jeśli serwer ma 64-bitowy. Czy podobny fragment kodu vbscript działa poprawnie? –

+0

Tak, VBScript działa poprawnie. – Baz

+0

Twoja ASP ma 'Response.Write (" Mój pierwszy skrypt ASP! ")', Ale twój ślad debugowania pokazuje 'Response.Write (" Mój trzeci skrypt ASP! ") \ R \ n'. Czy możesz sprawdzić, czy jest to ta sama strona, czy inna strona. – user568109

Odpowiedz

5

może nie być odpowiednim rozwiązaniem w przeszłości miałem tego problemu.
Niedawne wersje activepythona wydają się być uszkodzone dla aktywnych skryptów.
Udało mi się tylko wersję 2.5.6.10.
Jeśli wersja nie jest ważna, możesz wypróbować tę starszą wersję.

+0

Przeczytałem coś na ten temat, ale wciąż udało mi się go uruchomić na moim komputerze z WindowXP z Pythonem 3.2. – Baz

+0

Chociaż muszę przyznać, że jeśli przeglądam w Menedżerze IIS na moim komputerze z systemem Windows, pojawia się błąd 500, gdy próbuję załadować moją stronę. Muszę ponownie uruchomić tę stronę dla tej strony, aby strona działała ponownie. – Baz

+0

Rozumiem. Wszystkie moje próby były w systemie Windows 7. Poddałem się :) Możesz spróbować zarejestrować się w 'pyscript.py --debug' i śledzić używając Pythonwin.exe. Może coś znajdziesz. –

2

Problemem jest trace metoda i print oświadczenia w win32comext\axscript\client\framework.py bo w komponentów COM piśmie do sys.stdout lub sys.stderr podobnego rachunku print powoduje wyjątek dla przykładu trace("Debugging extensions (axdebug) module does not exist - debugging is disabled..") na linii 572 z framework.py powoduje wyjątek.

Jednym z obejść jest dodanie import win32traceutil w framework.py. win32traceutil przekierowuje wyjście do win32trace remote collector i rozwiązuje problem bez potrzeby włączania debugowania, które powoduje problemy z wydajnością.

Innym rozwiązaniem jest przekierowanie stdout i stderr na wartość null, możesz dodać następujący fragment kodu u góry framework.py.

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

UPDATE: przyczyna i rozwiązanie

Istnieje już mechanizm framework.py aby zapobiec drukiem i oświadczenia prześledzić podnieść wyjątek, ale problem jest w sposobie SafeOutput klasy write. Gdy śledzenie i debugowanie nie jest włączone, w metodzie zapisu występuje wyjątek, a win32api.OutputDebugString w klauzuli except wywoła niewłaściwe kodowanie powodujące wyjątek.Ponieważ win32api.OutputDebugString akceptuje ciąg Unicode, a nie zestaw znaków wielobajtowych (MBCS) jako argument.

Rozwiązanie:

w win32comext\axscript\client\framework.py w klasie 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 

wystarczy zmienić

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

do

win32api.OutputDebugString(message) # Unicode 
Powiązane problemy