2012-02-12 16 views
7

La siguiente secuencia de comandos ASP es que me da el error: "HTTP/1.1 500 Error del servidor"error 500 de servidor para Python en secuencias de comandos ASP

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

cuando lo ejecuto en IIS 7.5 de Windows 7 (64 bits). En el registro de errores simplemente menciona un error ASP_0147.

He instalado Python 3.2 y Python 3.2.2.3 activo en el servidor y registrada a través de Python: pyscript.py

He habilitado aplicaciones de 32 bits para el servidor. También instalé Python para Windows para ver si eso ayudaría.

¿Puede sugerirme cómo puedo solucionar esto?

ACTUALIZACIÓN:

He conseguido que esta trabajando ahora para python3 pero tengo que registrarse con --debug, de la siguiente manera:

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

Por qué será que sólo funcionan en modo de depuración ? ¿Es seguro correr en este modo?

Aquí es la traza cuando se habilita la depuración:

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] 

Gracias,

Barry

+0

La permitir que las aplicaciones de 32 bits es un ajuste o n el grupo de aplicaciones, pero solo relevante si su servidor es de 64 bits. ¿Se ejecuta correctamente una pieza similar del código de vbscript? –

+0

Sí, VBScript funciona bien. – Baz

+0

Su ASP tiene 'Response.Write (" Mi primer script ASP! ")', Pero su seguimiento de depuración muestra 'Response.Write (" Mi tercer script ASP! ") \ R \ n'. ¿Puedes verificar si es la misma página o página diferente? – user568109

Respuesta

5

puede no ser la solución adecuada, en el pasado he tenido este problema.
Las versiones recientes de activepython parecen rotas para las secuencias de comandos activas.
Pude solo la versión 2.5.6.10.
Si la versión no es importante, puede probar esa versión anterior.

+0

He leído algo sobre esto, pero aún así conseguí que funcionara en mi máquina de Windows XP con Python 3.2. – Baz

+0

Aunque debo admitir que si navego dentro de IIS Manager en mi máquina de Windows, obtengo el error 500 si intento cargar mi página. Entonces necesito reiniciar iis para este sitio web para que la página vuelva a funcionar. – Baz

+0

Entiendo. Todos mis intentos fueron en Windows 7. Me rendí :) Puedes intentar registrarte con 'pyscript.py --debug' y rastrear usando Pythonwin.exe. Quizás puedas encontrar algo. –

2

El problema es trace método y print declaraciones en el win32comext\axscript\client\framework.py porque en los componentes COM escrito al sys.stdout o sys.stderr como la declaración print provoca una excepción, por ejemplo, trace("Debugging extensions (axdebug) module does not exist - debugging is disabled..") en la línea 572 de framework.py provoca una excepción.

Una solución consiste en agregar import win32traceutil en el framework.py. El win32traceutil redirige la salida a win32trace remote collector y soluciona el problema sin necesidad de habilitar la depuración para causar problemas de rendimiento.

Otra solución está redirigiendo stdout y stderr a nulo, puede agregar el siguiente fragmento de código en la parte superior de framework.py.

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

ACTUALIZACIÓN: La raíz del problema y la solución

Ya existe un mecanismo en el framework.py para evitar la impresión y rastrear declaraciones a lanzar una excepción, pero el problema está en el método de SafeOutput clase write. Cuando el seguimiento y la depuración no están habilitados, en el método de escritura se produce una excepción y win32api.OutputDebugString en la cláusula except invocará con la codificación incorrecta que causa una excepción.Porque el win32api.OutputDebugString acepta cadena Unicode, no un juego de caracteres multibyte (MBCS) como argumento.

La solución:

en el win32comext\axscript\client\framework.py en la clase 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 

acaba de cambiar

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

a

win32api.OutputDebugString(message) # Unicode 
Cuestiones relacionadas