我有一个名为 "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接口更加熟悉了。
在那里,我已经对类似的问题写了一个相当广泛的答案。我推荐大家阅读(阅读包括参考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。
如果大家有什么问题或者问题,请告诉我。