我试着使用SASpy,但它不起作用。我可以打开SAS .egp文件,但不能按顺序运行其中的多个脚本。
import os, sys, subprocess
def OpenProject(sas_exe, egp_path):
sasExe = sas_exe
sasEGpath = egp_path
subprocess.call([sasExe, sasEGpath])
sas_exe = path\path\
egp_path = path\path\path\
OpenProject(sas_exe, egp_path)发布于 2020-12-15 06:58:19
这在一定程度上取决于工作流到底是什么。一些附注,然后是完整的解决方案。
EGP确实应该用于开发,然后使用.sas (文本)文件完成生产。EGP可以直接将节点存储为.sas文件;如果您想了解更多信息,可以问一个新问题,但这很容易弄清楚。最佳实践是让EGP将代码模块保存为.sas文件,然后运行这些文件- SASPy可以很容易地为您做到这一点。
第二:如果你使用SAS内置的Git连接,那么我想你可以更容易地做到这一点。如果您已经将Git用于其他进程,请考虑这样做。同样,您最终得到了一个.sas文件,并且可以通过SASPy直接运行该文件。
那么:假设你必须使用.egp本身,没有太多不同的移动部件,那么你如何在Python中做到这一点呢?这里的关键是.egp格式。EGP是一个容器文件,它实际上是一个.zip格式的容器,其中包含您想要运行的所有SAS代码,其中包括文本。xml格式的文本,但仍然是文本。
您可以编写一个python程序,使用zipfile库将.egp作为.zip文件打开,然后使用xml.etree.ElementTree解析该项目中的project.xml文件。具体从那里做什么取决于您的特定细节,这完全超出了Stack Overflow答案的范围,但是如果您在视觉上做得更好,您可以简单地将.egp重命名为.zip,然后在您选择的解压缩程序中打开,然后在文本编辑器中浏览project.xml,并找到与这些节点相关的节点和代码。
然后,您可以将.sas代码提取为文本,并通过SASPy直接提交,或者将其提取为.sas文件,然后以您喜欢的方式提交(SASPy或其他文件)。
我为一个项目做了类似的事情-我实际上并不运行其中的代码,我只是解析它以验证正确的程序是否从EGP同步到生产环境-但实际提交我编写的代码将是微不足道的,总共大约有50行代码。我可能会在今年或明年写一篇关于这个主题的SGF论文,在这种情况下,我会尝试并记住在这里提交它-或者你可以去我的github page看看它是否在那里(在未来!)。
https://stackoverflow.com/questions/65265822
复制相似问题