使用与VBS

时间:2018-03-19 18:16:32

标签: python python-3.x vbscript enterprise-guide

我有一个名为“SAS Enterprise Guide”的应用程序,它是一个与SAS平台兼容的流程开发程序。在其中,我根据自己的喜好创建了一个流程,然后我可以“安排”它。此“调度”过程输出vbs脚本并创建任务调度程序对象。 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脚本似乎包含一些错误捕获,我也想这样做,但我不知道如何。为了测试,我创建了一个EG项目,它将在100%的时间内失败。当我通过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中复制它。有谁有想法吗?

1 个答案:

答案 0 :(得分:0)

已经2年了,从那以后,我对EG的COM接口变得更加熟悉。

Running SAS EG project with Python

在这里,我对类似问题写了一个相当广泛的答案。我建议阅读(并阅读Chris Hemedinger对SAS官方文档的引用)。

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

要读取日志,您需要遍历流中的每个项目,检查日志,然后在日志文本中扫描“ ERROR”。如果流项目是egData项,则对其进行迭代以访问egTask项并读取那些日志。

正如我所说,Chris Hemedinger编写了出色的文档,其中包括对所有EG Type代码的查找。尽管Python中没有示例,但它非常易于访问。 2017年撰写的SAS文章的当前链接在此处:https://communities.sas.com/t5/SAS-Communities-Library/Doing-More-with-SAS-Enterprise-Guide-Automation/ta-p/417832?title=Not_Just_for_Scheduling:_Doing_More_with_SAS_Enterprise_Guide_Automation

如果有人有疑问或问题,请告诉我。

相关问题