当从另一个Python脚本运行语法时,在SPSS中保存Python变量

时间:2017-01-23 12:00:28

标签: python spss

在SPSS中,在BEGIN和END PROGRAM命令中使用Python创建的任何变量都将存储在内存中以用于其余语法。但是,如果从另一个Python命令从不同的语法调用语法,则创建的Python变量将仅存在于创建它的BEGIN和END程序中。例如:

在调用程序的SPSS插入脚本中:

BEGIN PROGRAM. 
import spss
spss.Submit ('''
INSERT FILE = '~~FILELOCATION~~'
        SYNTAX=INTERACTIVE ERROR=CONTINUE CD=NO.
    ''')
END PROGRAM. 

在~~文件位置~~被叫:

BEGIN PROGRAM.  
firstvar = "34"
END PROGRAM.

BEGIN PROGRAM.
secondvar = "23"
print(firstvar + secondvar)
END PROGRAM.

如果后一个脚本是从第一个程序的insert file命令运行的,那么结果是firstvar不会被转移到第二个BEGIN PROGRAM中。

有没有办法将此变量存储在Python程序的内存中,该内存开始用于插入文件,因为此处的任何变量都将存在于整个插入的语法中?如果这不可能,那么在插入文件命令中将在一个Python脚本中创建的变量传递给另一个Python脚本的最佳方法是什么。

我希望这是有道理的,如果您有任何问题要澄清问题,请告诉我。

2 个答案:

答案 0 :(得分:1)

第一个程序正在创建一个名为firstvar的局部变量。您可以通过将其明确分配给其模块,将其保留到第二个程序中。这比将变量抛入全局变量更有序。

import sys
sys.modules [__ name __] .firstvar = 34

并将其称为
sys.modules中[__名__]。firstvar
在第二个计划中。

答案 1 :(得分:0)

对我来说效果很好(尽管有很小的变化)。

这是输出日志中的打印件:

insert file="c:\temp\pytest.sps". 
  44  0  * Encoding: windows-1252. 
  45  0  BEGIN PROGRAM. 
  46  0  firstvar = "34" 
  47  0  print firstvar 
34 
  47  0  END PROGRAM. 
  48  0   
  49  0  BEGIN PROGRAM. 
  50  0  secondvar  = "23" 
  51  0  print secondvar 
23 
  51  0  END PROGRAM. 
  52  0   
  53  0  * End of INSERT and INCLUDE nesting level 01. 
BEGIN PROGRAM. 
print firstvar 
print secondvar 
END PROGRAM. 
34 
23

更新

我现在也可以复制这个问题而且也很惊讶地注意到了。然而,有一个简单的解决方案是将python变量定义为globals

BEGIN PROGRAM.  
global firstvar
firstvar = "34"
END PROGRAM.