1

我一直在研究STAF 和 STAX。我的目标是使用 STAF & STAX Return Testcase PASSFAIL读取JSON文件。我尝试使用最新的 python 版本将我的员工更新到最新版本。

Python 版本详情

20130408-15:38:19   
Python Version : 2.5.2 (Release_2_5_2:7206, Mar 2 2011, 23:12:06) 
[Java HotSpot(TM) Client VM (Sun Microsystems Inc.)]

这是我的代码:

try:
      import simplejson as json
    except ImportError:
      import json
  title = [] 
  album = []
  slist = []
  json_data=open('d:\Json_File.txt')
  data = json.load(json_data)
  for i in range(data["result"].__len__()):
      title = data["result"][i]["Title"]
      album = data["result"][i]["Album"]
      slist = data["result"][i]["Title"] + ' [' + data["result"][i]["Album"] + '] \n'

它给出了下面给出的错误

20130408-11:32:26   STAXPythonEvaluationError signal raised. Terminating job. 
===== XML Information =====
File: new13.xml, Machine: local://local 
Line 15: Error in element type "script".

===== Python Error Information =====
com.ibm.staf.service.stax.STAXPythonEvaluationException: 
Traceback (most recent call last):
  File "<pyExec string>", line 1, in <module>
ImportError: No module named simplejson

===== Call Stack for STAX Thread 1 =====[
  function: main (Line: 7, File: C:\STAF\services\stax\samples\new13.xml, Machine: local://local)
  sequence: 1/2 (Line: 14, File: C:\STAF\services\stax\samples\new13.xml, Machine: local://local)
]

在 STAF 模块中包含 JSON 的过程是什么。

4

2 回答 2

1

STAX 使用 Jython(用 Java 编写的 Python 版本)而不是 Python 在 STAX 作业的元素内执行代码。正如我所说,我使用的是最新版本的 STAX,v3.5.4,然后它提供了一个嵌入式 Jython 2.5.2(它实现了与 Python 2.5 相同的一组语言特性)来执行元素内的代码。

注意: Jython 2.5.2 不包含 simplejson,因为 simplejson 包含在 Python 2.6 或更高版本中。

附录 F:STAX 用户指南中的“ Jython 和 CPython 差异”讨论了 Jython 和 Python(又名 CPython)之间的一些差异。在系统中安装 Python 2.7 或更高版本不会影响 STAX 使用 Jython 2.5.2 在 STAX 作业的元素内执行代码这一事实。但是,“simplejson 可以通过 Jython 运行。” 我将包含 simplejson 模块的目录添加到我的 STAX 作业中的 sys.path 中,然后导入 simplejson。
例如:

<script> 
  myPythonDir = 'C:/simplejson'   

  import sys 
  pythonpath = sys.path 

  # Append myPythonDir to sys.path if not already present 
  if myPythonDir not in pythonpath: 
    sys.path.append(myPythonDir) 

  import simplejson as json 
</script> 

或者,如果您想使用安装在系统上的 Python 2.7 或更高版本(包括 simplejson),您可以使用 a* 通过您的 STAX 作业运行 Python 脚本(使用 json)* 元素。

例如,要使用 Python 2.7(如果安装在 C:\Python2.7 中)在 C:\tests 中运行名为 YourPythonScript.py 的 Python 脚本。

<process> 
  <location>'local'</location> 
  <command mode="'shell'">'C:/Python2.7/bin/python.exe YourPythonScript.py'</command> 
  <workdir>'C:/tests'</workdir> 
</process> 
于 2013-04-09T05:05:26.163 回答
0

我对STAF / STAX知之甚少。但是按照错误的说法,似乎simplejson模块不可用。重写导入行如下:

try:
  import simplejson as json
except ImportError:
  import json

如果导入失败(Python 2.6+),您可以回json退到模块。

于 2013-04-08T06:35:06.717 回答