当语法为来自另一个 Python 脚本的 运行 时,在 SPSS 中保留 Python 变量
Holding Python variables in SPSS when the Syntax is run from another Python script
在 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.
在 ~~FILE LOCATION~~ 被调用:
BEGIN PROGRAM.
firstvar = "34"
END PROGRAM.
BEGIN PROGRAM.
secondvar = "23"
print(firstvar + secondvar)
END PROGRAM.
如果后一个脚本是 运行 来自第一个程序的插入文件命令,结果是第一个变量不会被带入第二个 BEGIN PROGRAM。
有没有办法将此变量存储在开始用于插入文件的 Python 程序的内存中,因为这里的任何变量都将存在于整个插入的语法中?如果这不可能,那么在插入文件命令中将在一个 Python 脚本中创建的变量传送到另一个脚本的最佳方法是什么。
我希望这是有道理的,如果您有任何疑问要澄清问题,请告诉我。
对我来说效果很好(尽管有非常小的改动)。
这是输出日志的打印回:
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.
第一个程序正在创建一个名为 firstvar 的局部变量。您可以通过将其显式分配给它的模块来使其持久化到第二个程序中。这比将变量放入全局变量更有序。
导入系统
sys.modules[__name__].firstvar = 34
并将其称为
sys.modules[__name__].firstvar
在第二个节目中。
在 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.
在 ~~FILE LOCATION~~ 被调用:
BEGIN PROGRAM.
firstvar = "34"
END PROGRAM.
BEGIN PROGRAM.
secondvar = "23"
print(firstvar + secondvar)
END PROGRAM.
如果后一个脚本是 运行 来自第一个程序的插入文件命令,结果是第一个变量不会被带入第二个 BEGIN PROGRAM。
有没有办法将此变量存储在开始用于插入文件的 Python 程序的内存中,因为这里的任何变量都将存在于整个插入的语法中?如果这不可能,那么在插入文件命令中将在一个 Python 脚本中创建的变量传送到另一个脚本的最佳方法是什么。
我希望这是有道理的,如果您有任何疑问要澄清问题,请告诉我。
对我来说效果很好(尽管有非常小的改动)。
这是输出日志的打印回:
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.
第一个程序正在创建一个名为 firstvar 的局部变量。您可以通过将其显式分配给它的模块来使其持久化到第二个程序中。这比将变量放入全局变量更有序。
导入系统
sys.modules[__name__].firstvar = 34
并将其称为
sys.modules[__name__].firstvar
在第二个节目中。