如何在WSC中调试Python

2024-05-15 21:06:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我们正在为一个大型(传统)web应用程序编程经典ASP。使用WSC(Windows脚本组件)将GUI与业务逻辑分离开来,WSC包含业务逻辑,经典的asp用于显示返回的信息。WSC返回stringvalues、ADO记录集和某些情况下的vbscript对象。在

目前,我们正试图从WSCs内部使用VBscript切换到Python(pyscript),这样至少所使用的语言是现代的,并且具有更现代的特性(比如SOAP、ORM解决方案或Memcached)。在

在经典ASP中使用Python代码在使用pywin32并将Python注册为脚本语言时效果良好,但我们遇到了两个基本问题:

  1. 在WSC中,使用“implements”标记应该使WSC中的代码可以使用所有的IIS标准对象(服务器、会话、请求、响应等)。当使用Python时,它似乎不起作用。也许我使用了不正确的语法,或者我需要在Python代码中添加一些额外的定义,但是我似乎不知道如何获得这些对象。 有关WSC的更多信息:http://aspalliance.com/414

  2. 当ASP页面出现错误时,浏览器会显示回溯,一切正常。但是,如果在WSC内部发生错误,那么对浏览器的反馈很少或根本没有。当使用VBscript时,Windows允许开发人员选择调试器,并且(在我们的例子中)visualstudio会启动并向我们显示错误和包含错误的行。只要您在本地进行开发,这种方法就可以工作(因此本地开发机器运行IIS)。 使用Python时,什么也不会发生,只是浏览器中的一条非常模糊的消息,即:

错误“80020009” 出现异常。在

我尝试过不同的方法来解决这个问题;我尝试过导入win32traceutil并打开一个跟踪收集器窗口。奇怪的是,它将捕获我所有的print()语句,而不是Python错误消息。看起来好像stdout被捕获了,但是stderr没有,如果Python中还有其他方法可以重定向或显示错误消息,我也愿意尝试一下。我甚至考虑过使用一个非常大的try..except,但是除了非常糟糕的样式之外,WSC还包含一堆单独的函数,这意味着实现try..除了在每个函数中。我真的不想去那里。在

如果有人能帮我解决这两个问题(尤其是nr2是我们公司使用Python的一大亮点),我将不胜感激。如果有其他方法可以让Python回溯变得可见,那么这将是一个很大的进步。在

顺便说一句,我已经把这个问题发布到不同的邮件列表中,包括pywin32邮件列表,但是直到现在还没有人能够帮助我们。在

所以,帮帮我,你是我唯一的希望。。。在

谢谢大家

埃里克

下面我有一个非常简单的例子,由一个ASP页面和一个pythonwsc组成,ASP页面实例化WSC并从中调用一些函数。 这个响应.写入将无法工作,因为某些原因无法使用响应对象(problem nr.1),而且如果Python代码中有错误,浏览器将不会显示回溯或任何明确的消息(problem nr.2)。 当然,代码需要在IIS下运行,并且需要安装Python和PyWin32(或者activestate Python发行版,其中已经包括PyWin32)

Python.wsc:

<?xml version="1.0" encoding="Windows-1252" ?> 
<component> 
<?component error="true" debug="true"?> 
<registration 
        description="python" 
        progid="python.WSC" 
        version="1.00" 
        classid="{F236F59E-3F6F-44EA-A374-DBFA9F90ECB3}" 

</registration> 
<public> 
        <method name="testmethod"> 
        </method> 
        <method name="helloWho"> 
                <PARAMETER name="who"/> 
        </method> 
</public>

<implements type="ASP" id="ASP"/> 

<script language="Python"> 
<![CDATA[ 
def testmethod(): 
        Response.Write('output of results converted to a string') 

def helloWho(who): 
        return "Hello "+who+"!" 
]]> 
</script> 
</component> 

ASP页面:

^{pr2}$

Tags: 对象方法函数代码消息windows错误浏览器
1条回答
网友
1楼 · 发布于 2024-05-15 21:06:01

对于#2,您需要在调用组件的VBScript中捕捉异常。WSC只是一个com组件。当您调用WSC时,请暂时忽略python正在运行。它只是一个COM组件。在

调用该组件时可能发生错误。当调用可能失败的组件时,最好使用错误处理。在VBSCript中,这意味着出错时恢复或其他什么。在

在Javascript中,它表示try..catch子句。在

好奇:为什么在WSC中使用python?为什么不只是Jscript-更主流,也相当现代。在

相关问题 更多 >