8

次の 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]

ありがとう、

バリー

4

2 に答える 2

5

適切な解決策ではないかもしれませんが、過去にこの問題が発生しました。
最近のバージョンの activepython は、アクティブ スクリプトに対して壊れているようです。
バージョン2.5.6.10だけできました。
バージョンが重要でない場合は、その古いバージョンを試すことができます。

于 2012-02-13T18:51:14.743 に答える
2

問題はtrace、メソッドとprintステートメントですwin32comext\axscript\client\framework.py 。COM コンポーネントでステートメントに書き込むと、たとえば行 572 で例外が発生するsys.stdoutなどsys.stderr、例外が発生するためです。printtrace("Debugging extensions (axdebug) module does not exist - debugging is disabled..")framework.py

1 つの回避策はimport win32traceutilframework.py. パフォーマンスの問題を引き起こすデバッグを有効にする必要なく、win32traceutil出力をリダイレクトして問題を解決します。win32trace remote collector

もう 1 つの回避策はリダイレクトstdoutstderrnull です。次のコード スニペットを の上部に追加できますframework.py

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

更新: 根本原因と解決策

framework.pyprint および trace ステートメントが例外を発生させないようにするメカニズムは既にありますが、問題はクラスのwriteメソッドにあります。SafeOutputトレースとデバッグが有効になっていない場合、write メソッドで例外が発生win32api.OutputDebugStringし、except 句で例外が発生する間違ったエンコーディングで呼び出されます。win32api.OutputDebugString引数としてマルチバイト文字セット (MBCS) ではない Unicode 文字列を受け入れるためです。

ソリューション:

クラスwin32comext\axscript\client\framework.pyで_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

ただ変える

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

win32api.OutputDebugString(message) # Unicode
于 2013-05-31T18:01:06.877 に答える