2017-07-03 99 views
1

我有一個Python 2.7腳本,其中包括包含下面的一段代碼:運行SPSS會議行動

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腳本。

回答

2

不幸的是,這是一個複雜的問題。我不認爲統計數據按照文件記錄工作。我將採取與發展。

看來,在V24中,當您通過實用程序>運行腳本(與發出SCRIPT命令相同)運行Python腳本時,腳本連接到統計信息查看器進程,但不連接到統計後端spssengine進程),這是數據所在的地方。通常有三個進程正在運行 - stats.exe進程,spssengine進程,以及Python代碼的startx進程。您的腳本可以通過spss.Submit api發出命令,並且可以使用其他spss apis,但它們違背了後端的新副本,因此預期的後端上下文不存在。

要解決這個問題,你可以像

begin program. 
import ascript 
end program. 

其中ascript.py是Python的搜索路徑上的Python模塊運行一個簡單的程序。 (你可以把這些線在SPS文件並使用INSERT執行它了。)

另一種方式來處理,這將是在外部模式下運行統計數據。在該模式下,您運行使用SPSS API的Python程序,但Python程序處於頂層,並且不顯示統計用戶界面。你可以在Python腳本幫助中閱讀這個。

外部模式的一個優點是您可以使用自己喜歡的Python IDE來構建和調試代碼。如果你基本上是一個Python人,那麼這是一個很大的優勢。我使用Wing IDE,但任何Python IDE都可以工作。您還可以通過編輯統計信息安裝目錄中的clientscriptingcfg.ini文件來設置替代IDE作爲默認值。有關詳細信息,請參閱腳本幫助。使用Wing等工具,即使在統計數據中運行,也可以調試腳本或其他Python代碼。

+0

其實我已經試過_external MODE_運行,但不幸的是它已經在我死了。見https://stackoverflow.com/questions/44834241/running-a-python-script-with-spss 現在,我只是運行基本上包了一堆Python類和功能的語法文件。不容易看,但它做的工作。 – Interfector

+0

我不知道爲什麼腳本失敗,但如果要顯示在內部模式和外部模式Python路徑,你應該能夠看到缺什麼,並補充說,在外部模式。 – JKP