用类似于VBS的win32com.client检索COM错误。

我有一个名为 “SAS企业指南 “的应用程序,它是一个与SAS平台兼容的过程流开发程序。在它里面,我根据自己的喜好创建了一个流程,然后就可以对它进行 “调度”。这个 “调度 “过程会输出一个vbs脚本,并创建一个Task Scheduler对象。vbs脚本创建一个COM对象,打开过程流项目,运行它,保存它,然后关闭它。就是这样,总的来说是一个很短很简单的脚本。

由于种种原因,这个流程的效率很低,所以我写了一个python脚本来迭代一堆EG项目(想这样安排30多个脚本是不可行的)。

import win32com.client, os

os.chdir('EG Scripts')
app = win32com.client.Dispatch("SASEGObjectModel.Application.7.1")

for file in os.listdir()

    project = app.Open(file, "")

    project.Run()
    project.Save()
    project.Close()
    project = None

app.Quit()
app = None
del app

然而,他们提供的vbs脚本似乎包含了一些错误捕捉,我也想这样做,但我不知道怎么做。为了测试,我创建了一个100%会失败的EG项目。当我通过python运行它时,它只是默默地失败了。我知道那个脚本没有成功执行,但在控制台中没有任何返回或打印。

在他们提供的脚本中,我看到他们运行了这些行。

Set app = CreateObject("SASEGObjectModel.Application.7.1")
If Checkerror("CreateObject") = True Then
    Exit Sub
End If

Function Checkerror(fnName)
    Checkerror = False

    Dim strmsg
    Dim errNum

    If Err.Number <> 0 Then
        strmsg = "Error #" & Hex(Err.Number) & vbCrLf & "In Function " & fnName & vbCrLf & Err.Description
        'MsgBox strmsg  'Uncomment this line if you want to be notified via MessageBox of Errors in the script.
        Checkerror = True
    End If

End Function

但我似乎不知道如何在python中复制这句话。有人有什么办法吗?

解决方案:

2年了,后来我对EG的COM接口更加熟悉了。

用Python运行SAS EG项目

在那里,我已经对类似的问题写了一个相当广泛的答案。我推荐大家阅读(阅读包括参考Chris Hemedinger的SAS官方文档)。

具体到这个问题,我发现答案是运行项目,将项目保存到一个临时文件中,然后重新打开项目来读取日志以查找错误。

读取日志,需要对流程中的每个项目进行迭代,检查是否有日志,然后扫描日志文本中的 “ERROR”。如果流程项目是一个 egData 项,然后遍历它,寻找 egTask 项目并读取这些日志。

正如我说过的,Chris Hemedinger 写了很棒的文档,包括所有 EG 类型代码的查询。虽然没有Python中的例子,但很容易理解。目前,2017年写的SAS文章的链接在这里。https:/communities.sas.comt5SAS-Communities-LibraryDoing-More-with-SAS-Enterprise-Guid-Automationta-p417832?title=Not_Just_for_Scheduling:_Doing_More_withSAS_Enterprise_Guid_Automation。

如果大家有什么问题或者问题,请告诉我。

给TA打赏
共{{data.count}}人
人已打赏
未分类

Angular项目忘记密码发送邮件链接在Chrome浏览器中无法使用(仅第一次,第二次如期使用)。

2022-9-8 13:01:25

未分类

在MVC3 Action中使用Response.End。

2022-9-8 13:12:38

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索