Как разобрать xml из подпроцесса с распутыванием в python - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь проанализировать некоторые xml из подпроцесса с распутыванием в python.

out = subprocess.run(["./my_executable",options], stdout=PIPE, stderr=PIPE)
root = untangle.parse(out.stdout)

, который дает мои TypeError:

Traceback (most recent call last):
  File "./script.py", line 64, in <module>
    root = untangle.parse(out.stdout)
  File "/home/user/.local/lib/python3.6/site-packages/untangle.py", line 182, in parse
    parser.parse(StringIO(filename))
TypeError: initial_value must be str or None, not bytes

, когда Я печатаю out.stdout, на самом деле он выдает теги xml, как и ожидалось, но в следующем формате:

b'<root>\n  <c1>value1</c1>\n  <c2>value2</c2>\n</root>\n'

Я попытался удалить \n с помощью re.sub(), но затем я получил другую ошибку: TypeError: cannot use a string pattern on a bytes-like object.

Я думал, что это может быть проблема с кодировкой и что документация поможет мне, но она кажется довольно ограниченной. Как сделать так, чтобы Untangle анализировал байтовоподобный объект?

1 Ответ

1 голос
/ 23 апреля 2020

Сначала декодируйте байтообразный объект в строку.

Я использую здесь check_output, чтобы вызвать исключение, если my_executable заканчивается ненулевым кодом возврата.

out = subprocess.check_output(["./my_executable",options])
root = untangle.parse(out.decode("utf-8"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...