【问题标题】:Holding Python variables in SPSS when the Syntax is run from another Python script当从另一个 Python 脚本运行语法时,在 SPSS 中保存 Python 变量
【发布时间】:2017-01-23 12:00:27
【问题描述】:

在 SPSS 中,使用 Python 在 BEGIN 和 END PROGRAM 命令中创建的任何变量都将存储在内存中以用于其余的语法。但是,如果从另一个 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 脚本中创建的变量传送到另一个脚本的最佳方法是什么。

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

【问题讨论】:

    标签: python spss


    【解决方案1】:

    第一个程序正在创建一个名为 firstvar 的局部变量。您可以通过将其显式分配给其模块来使其持久化到第二个程序中。这比将变量扔到全局变量中要有序一些。

    导入系统
    sys.modules[__name__].firstvar = 34

    并将其称为
    sys.modules[__name__].firstvar
    在第二个程序中。

    【讨论】:

      【解决方案2】:

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

      这是输出日志的打印回:

      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.
      

      【讨论】:

      • Jignesh 我对你的代码有点困惑,你是从 Python 脚本中调用插入命令吗?这是一个关键点
      • 谢谢,抱歉没有注意到这一点。尽管如此,还是通过解决方案编辑了原始答案。
      • 感谢Jignesh,没有想到使用全局变量,因为在开始程序之外运行时程序不需要它们!
      猜你喜欢
      • 2016-09-03
      • 1970-01-01
      • 2015-09-14
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多