使用Python运行SAS EG项目

时间:2016-05-04 23:07:09

标签: python sas

我已经搜索了一些通过Python执行SAS Enterprise Guide项目及其程序的方法,但我找不到任何东西。我只找到SAS示例,如问题:How do I invoke a sas script in python?

我可以将企业指南项目称为我的sysin,就像建议的链接中的答案一样,但是当项目打开时,它会尝试导入我传递的所有其他参数。我也找不到每个SAS程序的路径,因为它在项目中。

有没有人知道如何通过python简单地在项目中运行SAS程序?

由于

3 个答案:

答案 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”示例中处理的Types0: egFile1: egCode2: egData3: 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来检测错误。我已经实现了我的类似功能。