从外部Python脚本

时间:2017-07-03 16:09:31

标签: python spss

我有一个Python 2.7脚本,其中包含以下代码:

import spss    

columns = []

spss.StartDataStep()
dataset = spss.Dataset()
for column in dataset.varlist:
    columns.append(column.name)
spss.EndDataStep()

print columns

在SPSS语法中运行此代码时(在BEGIN PROGRAM.END PROGRAM之间),它会按预期运行,最后我会得到活动数据集中的变量。

但是,当运行与脚本一部分相同的代码时(因此来自Utilities > Run script...)将无法返回结果。

在运行脚本时,好像没有考虑SPSS会话上下文。

有没有解决这个问题的方法,或者我做错了什么? 我不想将我的代码作为Syntax文件的一部分运行,我只想使用vanilla Python脚本。

1 个答案:

答案 0 :(得分:2)

遗憾的是,这是一个复杂的问题。我不认为统计数据是按照文件记录的。我会用发展来解决这个问题。

在V24中,当您通过Utilities>运行Python脚本时运行脚本(与发出SCRIPT命令相同),您的脚本连接到统计查看器进程,但不连接到统计后端(spssengine进程),这是数据存在的位置。通常有三个进程在运行 - stats.exe进程,spssengine进程,以及对于Python代码,startx进程。您的脚本可以通过spss.Submit api发出命令,并且可以使用其他spss api,但是它们会违反后端的新副本,因此不存在预期的后端上下文。

要解决这个问题,你可以运行像

这样的简单程序
begin program.  
import ascript  
end program.  

其中ascript.py是Python搜索路径上的Python模块。 (您可以将这些行放在sps文件中,并使用INSERT来执行它。)

另一种解决方法是在外部模式下运行Statistics。在该模式下,您运行使用SPSS apis的Python程序,但Python程序位于顶部,并且不显示Statistics用户界面。您可以在Python脚本帮助中阅读相关内容。

外部模式的一个优点是您可以使用自己喜欢的Python IDE来构建和调试代码。如果你基本上是一个Python人,这是一个很大的优势。我使用Wing IDE,但任何Python IDE都应该可以工作。您还可以通过编辑Statistics安装目录中的clientscriptingcfg.ini文件来设置备用IDE作为默认值。有关详细信息,请参阅脚本帮助。使用像Wing这样的工具,即使在统计信息中运行,也可以调试脚本或其他Python代码。