首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在WSC中调试Python

如何在WSC中调试Python
EN

Stack Overflow用户
提问于 2010-10-07 08:11:00
回答 1查看 709关注 0票数 1

我们正在为一个大型(遗留的) web应用程序编写经典ASP。使用WSC (Windows脚本组件)很好地将GUI与业务逻辑分开;WSC包含业务逻辑,经典的asp用于显示返回的信息。WSC的返回字符串值、ADO记录集以及某些情况下的vbscript对象。

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

在经典的ASP中使用Python代码可以很好地使用pywin32和将Python注册为脚本语言,但是我们遇到了两个基本问题:

  1. 在WSC中,使用“实现”标记可以使所有IIS的标准对象(服务器、会话、请求、响应等)对WSC内部的代码可用。当使用Python时,它似乎不起作用。也许我使用的语法不正确,或者在Python代码中需要一些额外的定义,但我似乎不知道如何实现这些对象。关于WSC的更多信息:http://aspalliance.com/414
  2. When错误发生在ASP页面上,回溯显示在浏览器中,一切都很好。但是,如果WSC内部发生错误,则几乎没有或根本没有反馈给浏览器。当使用VBscript时,Windows允许开发人员选择调试器,并且(在本例中) Visual启动并显示错误和包含错误的行。只要您是在本地开发(因此本地开发机器运行IIS),这就可以工作。当使用Python时,什么都不会发生,只是浏览器中一条非常模糊的消息,即:

出现错误“80020009”异常。

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

如果有人能帮我解决这两个问题(尤其是nr 2是我们公司使用Python的一个很大的展示),我们将不胜感激。如果有任何其他方法使Python跟踪以某种方式显示出来,那将是向前迈出的一大步。

顺便说一下,我已经把这个问题发到了不同的邮件列表上,包括pywin32邮件列表,但是到目前为止,还没有人能够帮助我们。

所以,帮我堆叠,你是我唯一的希望.

谢谢大家,

埃里克

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

python.wsc:

代码语言:javascript
复制
<?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页面:

代码语言:javascript
复制
<%@ Language=VBscript %> 
<% 
        set pythonwsc= GetObject("script:"&Server.MapPath("./python.wsc")) 
        response.write(pythonwsc.helloWho("world")&"<br>") 
        pythonwsc.testmethod() 
%> 
EN

回答 1

Stack Overflow用户

发布于 2010-10-24 16:09:45

至于#2,您需要在调用组件的VBScript中捕获异常。WSC只是一个com组件。暂时忽略一下,在调用WSC时会有python在运行。只是一个COM组件。

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

在Javascript中,它的意思是try..catch子句。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3879788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档