繁体   English   中英

ASP脚本中的Python 500服务器错误

[英]500 Server Error for Python in ASP Script

以下asp脚本给出了错误:“HTTP / 1.1 500服务器错误”

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

当我在IIS 7.5 Windows 7(64位)上运行它时。 在错误日志中,它只是提到了ASP_0147错误。

我在服务器上安装了Python 3.2和Active Python 3.2.2.3,并通过pyscript.py注册了Python

我为服务器启用了32位应用程序。 我还安装了Python for Windows,看看是否有帮助。

你能建议我怎么解决这个问题吗?

更新:

我已经设法让这个为python3工作,但我必须注册--debug,如下所示:

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

为什么它只能在调试模式下工作? 在这种模式下运行是否安全?

这是启用调试时的跟踪:

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]

谢谢,

巴里

可能不是合适的解决方案,过去我遇到过这个问题。
最近的activepython版本似乎因活动脚本而中断。
我只能使用版本2.5.6.10。
如果版本不重要,您可以尝试使用旧版本。

问题是win32comext\\axscript\\client\\framework.py中的trace方法和print语句,因为在COM组件中写入sys.stdoutsys.stderr就像print语句导致例外trace("Debugging extensions (axdebug) module does not exist - debugging is disabled..")异常trace("Debugging extensions (axdebug) module does not exist - debugging is disabled..")framework.py的第572行导致异常。

一种解决方法是在framework.py添加import win32traceutil win32traceutil将输出重定向到win32trace remote collector并解决问题,而无需启用调试导致性能问题。

另一种解决方法是将stdoutstderr重定向到null,您可以在framework.py的顶部添加以下代码片段。

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

更新:根本原因和解决方案

framework.py已有一种机制可以防止print和trace语句引发异常,但问题出在SafeOutput类的write方法中。 如果未启用跟踪和调试,则在write方法中会发生异常,并且except子句中的win32api.OutputDebugString将使用错误的编码进行调用,从而导致异常。 因为win32api.OutputDebugString接受Unicode字符串而不是多字节字符集(MBCS)作为参数。

解决方案:

SafeOutput类的win32comext\\axscript\\client\\framework.py

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

只是改变

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

win32api.OutputDebugString(message) # Unicode

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM