在Groovy中从子流程调用读取序列化数据到python脚本

时间:2018-07-04 12:06:29

标签: python groovy

我有一个普通代码,其中调用了python脚本。有没有办法读取由python脚本打印/返回的json序列化数据?

用于调用python脚本的常规代码:

def sout = new StringBuilder(), serr = new StringBuilder()
def cmd = ["python2.7","myscript.py"]
def proc = cmd.execute()
proc.consumeProcessOutput(sout, serr)
proc.waitFor()
def parser = new JsonSlurper()
def jsonResp = parser.parseText(sout[0])
log.debug(jsonResp)

Python脚本:

dd = {'key1': 'value1', 
      'key2':'value2', 
      'key3': {'key31':'value31'}
      }
print json.dumps(dd)

输出:

jsonResp = {}(运行代码时)。

jsonResp['key1']也为空,表示未从进程输出中读取json。

1 个答案:

答案 0 :(得分:0)

您可能正在寻找这个:

    python代码中的
  • print json.drumps(dd)运行良好并完成了工作。您必须正确读取groovy代码中的过程输出。

在常规脚本中,def jsonResp = parser.parseText(sout[0])使用java.lang.StringBuilder作为Array list。这就像String []一样。因此,您正在加载字符串"{"中的第一个字符sout[0],共计String。

  

我不知道你为什么这样说。

JsonSlurper().parseText仅允许使用String参数,请参见doc。您可以按照以下显示的方式使用它:

  • parseText(sout.toString())

  • parseText(sout.readLines())