从外部Python脚本运行SPSS会话操作

从外部Python脚本运行SPSS会话操作,python,spss,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之间),它会

我有一个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
之间),它会按预期运行,并以活动数据集中的变量结束

但是,当作为脚本的一部分运行相同的代码时(因此从
实用程序>运行脚本…
),将不会返回任何结果

运行脚本时,似乎没有考虑SPSS会话上下文

有办法解决这个问题吗,还是我做错了什么?
我不想将代码作为语法文件的一部分运行,我只想使用普通的Python脚本。

不幸的是,这是一个复杂的问题。我认为统计数据并没有记录在案。我将把这个问题与发展联系起来

在V24中,当您通过Utilities>runscript(与发出script命令相同)运行Python脚本时,您的脚本似乎连接到Statistics Viewer进程,但没有连接到数据所在的统计后端(spssengine进程)。通常有三个进程在运行——stats.exe进程、spssengine进程,对于Python代码,还有startx进程。您的脚本可以通过spss.Submit api发出命令,也可以使用其他spss api,但它们不符合后端的新副本,因此预期的后端上下文不存在

为了解决这个问题,您可以运行一个简单的程序,如

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

另一种方法是在外部模式下运行统计信息。在该模式下,您运行一个使用SPSSAPI的Python程序,但Python程序位于顶部,并且不显示统计用户界面。您可以在Python脚本帮助中了解这一点


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

我实际上尝试过在外部模式下运行,但不幸的是,它在我身上死掉了。现在看,我只是运行一个语法文件,它基本上包装了一堆Python类和功能。我不知道为什么脚本失败了,但是如果您在内部模式和外部模式下显示Python路径,您应该能够看到缺少的内容,并在外部模式下添加这些内容。