我有一个名为“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中复制它。有谁有想法吗?
答案 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
如果有人有疑问或问题,请告诉我。