我已经搜索了一些通过Python执行SAS Enterprise Guide项目及其程序的方法,但我找不到任何东西。我只找到SAS示例,如问题:How do I invoke a sas script in python?
我可以将企业指南项目称为我的sysin,就像建议的链接中的答案一样,但是当项目打开时,它会尝试导入我传递的所有其他参数。我也找不到每个SAS程序的路径,因为它在项目中。
有没有人知道如何通过python简单地在项目中运行SAS程序?
由于
答案 0 :(得分:1)
您必须将SAS Enterprise Guide程序简单地保存为SAS程序,并使用SAS in batch mode将其作为SAS脚本运行。
SAS Enterprise Guide是一个可视化编辑器,但在幕后它仍在创建SAS代码。
答案 1 :(得分:0)
我和您有同样的抱怨,因此我创建了一个工具来从python或命令行执行egp文件。 https://github.com/kjnh10/saseg_runner
我希望这会有所帮助。
答案 2 :(得分:0)
EG具有一个可以用python自动化的COM接口,就像下面的user3394926的git repo一样。
来自SAS的Chris Hemedinger在SAS社区网站上写了一篇很棒的文章,他是github上的cjdinger,并且有一些vb脚本来显示如何访问各种COM接口。当前链接到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
请注意,有一个指向文档参考指南的链接,可作为CHM列出该文章中的每个对象及其方法和属性。
您还可以将EG脚本导出为要使用Windows Scheduler进行调度的VB脚本,您将在其中看到各种COM接口和功能。
基本执行是:
import win32com.client as win32
eg = win32.Dispatch('SASEGObjectModel.Application.7.1')
example_file = r'./my_eg_file.egp'
project = eg.Open(example_file, "")
project.Run()
project.SaveAs(example_file) # Note that this will overwrite, comment out or rename if you don't want that.
project.Close()
看看cjdinger拥有的示例。一些重要的细节:
大多数接口都具有Name
属性
标准EG项目的“流”包含不同类型的“项”
在给定项目中,有26种不同的types
项,每个项都有其自己的界面(未充分记录...)
cjdinger在其“ ExtractCodeAndLog.vbs”示例中处理的Types
是0: egFile
,1: egCode
,2: egData
,3: egTask
和{ {1}}
4: egQuery
-是可以迭代的“流程”的集合,我不是EG高级用户,但是我的大多数项目有2个,其中所有步骤和一个空的
project.ContainerCollection
-是另一个集合,但是特定流程中的项目,这些是主要步骤,但是<flow>.Items
可以有孩子egData
,这些孩子也显示为步骤在EG GUI中
例如:
Tasks
需要从各种对象的flows = project.ContainerCollection
for flow in flows:
print(f'FLOW: {flow.Name}')
for item in flow.Items:
print(f'ITEM: {item.Name} is type ID {item.Type}')
if item.Type in (2,): # egData type
for task in item.Tasks:
print(f'TASK: {task.Name} is a task of {item.Name} is type {task.Type}')
属性访问文本
大多数项目具有Text
属性,您可以访问使用Log
的文本,除了item.Log.Text
具有egData
的日志,您可以需要在获取日志之前运行项目,如果没有日志,则会引发错误。
如果有代码,则可以通过Task
对象访问它,并且item.TaskCode
是用于打印/书写的字符串属性
祝您好运,我可以尝试解决其他任何问题。我喜欢user3394926编写的Runner.py脚本,该脚本使用item.TaskCode.Text
搜索日志中的re
来检测错误。我已经实现了我的类似功能。