受this问题和答案的启发,我写了一个简单的“设置当前工作目录”。但有时会抛出这个错误:
<action-state id="securedAction">
<secured attributes="@myAction.accessGranted(#flowScope.parameter)" />
...
...
</action-state>
我无法将此错误引发到我的代码中的任何特殊情况,SPSS有时会抛出此错误,如果我继续执行程序有时它会工作,有时它不会出现上述错误,所以感觉好像客户端有时候没有启动或者其他的东西。 我的程序看起来像这样:
>Warning # 6894. Command name: BEGIN PROGRAM
>The external program exit unexpectedly and lost its content, a new exteranl
>program will startup to execute the rest of job.
我还设置了一个XML文件,并将它与python文件一起放在EXTPATHS EXTENSIONS目录中。
def Run(args):
import spss, spssaux, SpssClient, os
SpssClient.StartClient()
my_filepath_ = os.path.dirname(SpssClient.GetDesignatedSyntaxDoc().GetDocumentPath())
my_filepath = spssaux._smartquote(my_filepath_)
spss.Submit("CD %s ." % (my_filepath))
SpssClient.StopClient()
通过在语法文件中键入<Command xmlns="http://xml.spss.com/extension" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="SET_CWD" Language="Python">
</Command>
来调用它,SET_CWD
也是.py-和.xml文件的名称,SET_CWD
和SET_CWD.py
。
答案 0 :(得分:1)
我将这两个文件保存在文件夹C:\ProgramData\IBM\SPSS\Statistics\24\extensions
<强> MYSET_CWD.py 强>
def Run(args):
import spss, spssaux, SpssClient, os
SpssClient.StartClient()
my_filepath_ = os.path.dirname(SpssClient.GetDesignatedSyntaxDoc().GetDocumentPath())
my_filepath = spssaux._smartquote(my_filepath_)
spss.Submit("CD %s ." % (my_filepath))
SpssClient.StopClient()
<强> MYSET_CWD.xml 强>
<Command xmlns="http://xml.spss.com/extension" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="MYSET CWD" Language="Python">
</Command>
在保存的语法中,必须保存(否则您将收到错误消息No valid directory specification was found.
),我运行:
MYSET CWD.
当前工作目录更改为运行MYSET CWD.
的语法文件的保存位置。这是通过在SHOW directory.
之前和之后运行MYSET CWD.
来确认的。
答案 1 :(得分:0)
请注意GetDocumentPath &#34;如果语法文档未与文件关联,则返回与此语法文档对象或空字符串关联的语法文件的路径和文件名。&#34;
所以你应该在尝试做其他事情之前测试那个条件。
XML文件与此无关。如果不正确,当您尝试在代码获得控制权之前运行扩展命令时,将会出现错误。
在某些情况下,您可能没有指定的语法窗口(或者可能没有保存)。