Извлечение вывода Gerrit SSH в python - PullRequest
0 голосов
/ 04 июля 2018

Так что я использую plumbum для выполнения команды ssh против gerrit, но я не могу вывести вывод в виде словаря json.

eg: ssh abc.xyz.com gerrit query --patch-sets --format=json commit:12345678

Вывод этого также выводит следующие строки: тип: abcd rowCount: целое число runTimeMilliseconds: 123 ещё Изменения: ABCD

Мне кажется, это еще один словарь.

Итак, есть ли в любом случае вывод команды ssh в словарь python?

Ссылка: https://review.openstack.org/Documentation/cmd-query.html

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Вот как я заставил это работать:

data = ssh["abc.xyz.com",
    "gerrit",
    "query",
    "--patch-sets",
    "--format=JSON",
    "commit:",
    "12345678"]()

data2 = data[:data.rfind('{')]

Есть ли лучшее решение?

0 голосов
/ 11 июля 2018

Результат запроса может потенциально возвращать несколько изменений, каждое из которых будет находиться на отдельной строке, разделенной новыми строками. Последняя строка результата представляет собой сводку, которая включает подсказку о том, есть ли еще результаты (сверх лимита, установленного на стороне сервера или с помощью параметра limit в вашем запросе).

В вашем случае вы запрашиваете один коммит sha1, поэтому вы получаете только один результат, но он по-прежнему содержит итоговую строку.

Должна быть возможность преобразовать результат в dict, разделив вывод на новые строки и преобразовав каждую строку отдельно, например:

import json
data = ssh["abc.xyz.com",
    "gerrit",
    "query",
    "--patch-sets",
    "--format=JSON",
    "commit:",
    "12345678"]()
data2 = json.loads(data.split()[0])
0 голосов
/ 04 июля 2018

Чтобы получить ответ в формате JSON, вам необходимо изменить параметр «--format = text» на «--format = json»:

ssh abc.xyz.com gerrit query --patch-sets --format=json commit:12345678
...