Чтение сериализованных данных из вызова подпроцесса в скрипт Python в Groovy - PullRequest
0 голосов
/ 04 июля 2018

У меня есть отличный код, в котором вызывается скрипт Python. Есть ли способ прочитать сериализованные данные json, напечатанные / возвращенные скриптом python?

Groovy код для вызова скрипта 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 голосов
/ 05 июля 2018

Возможно, вы ищете это:

  • print json.drumps(dd) из кода Python работает хорошо и завершил свою работу. Вы должны правильно прочитать выходные данные процесса внутри кода Groovy.

В Groovy Script 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())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...