我们正在为一个大型(遗留的) web应用程序编写经典ASP。使用WSC (Windows脚本组件)很好地将GUI与业务逻辑分开;WSC包含业务逻辑,经典的asp用于显示返回的信息。WSC的返回字符串值、ADO记录集以及某些情况下的vbscript对象。
目前,我们正在尝试从在WSC中使用VBscript转换为Python (pyscript),这样至少所使用的语言是现代的,并且具有更现代的特性(比如SOAP、ORM解决方案或Memcached)。
在经典的ASP中使用Python代码可以很好地使用pywin32和将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:
<?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页面:
<%@ Language=VBscript %>
<%
set pythonwsc= GetObject("script:"&Server.MapPath("./python.wsc"))
response.write(pythonwsc.helloWho("world")&"<br>")
pythonwsc.testmethod()
%> 发布于 2010-10-24 16:09:45
至于#2,您需要在调用组件的VBScript中捕获异常。WSC只是一个com组件。暂时忽略一下,在调用WSC时会有python在运行。只是一个COM组件。
调用该组件时可能会发生错误。在调用可能失败的组件时,使用错误处理是很好的做法。在VBSCript中,这意味着错误恢复或其他什么。
在Javascript中,它的意思是try..catch子句。
好奇:为什么在WSC中使用python?为什么不只是Jscript -更主流,也相当现代。
https://stackoverflow.com/questions/3879788
复制相似问题