Вывод os.system в Python и использование его для создания текстового узла в файле XML - PullRequest
0 голосов
/ 12 января 2019

Я хочу выполнить команду docker ps -q, используя функцию python os.system, а затем получить ее выходные данные, чтобы использовать ее для создания текстового узла xml.

Я пытался xml.createTextNode(os.system("docker ps -q"):

  6 from xml.dom import minidom
  7 import os
  8
  9 xml = minidom.Document()
 10
 11 rootElem = xml.createElement('containers')
 12
 13 dataElem = xml.createElement('data')
 14
 15 idElem = xml.createElement('id')
 16 idElem.appendChild(xml.createTextNode(os.system("docker ps -q")))

Но это дает мне эту ошибку:

 File "scriptCreateXML.py", line 16, in <module>
    idElem.appendChild(xml.createTextNode(os.system("docker ps -q")))
  File "/usr/lib/python3.6/xml/dom/minidom.py", line 1658, in createTextNode
    raise TypeError("node contents must be a string")
TypeError: node contents must be a string

Я ожидаю выхода этого

<?xml version="1.0" ?>
<containers>
    <data>
        <id>some id</id>
    </data>
</containers>

1 Ответ

0 голосов
/ 12 января 2019

Измените последнюю строку, используйте subprocess вместо os и используйте check_output вместо call

In [25]: idElem.appendChild(xml.createTextNode(subprocess.check_output(["docker","ps", "-aq"]).decode('UTF-8')))
Out[25]: <DOM Text node "'967dd77436'...">

У меня нет запущенных контейнеров, поэтому я использовал «-aq», вы можете изменить его в соответствии с вашими требованиями.

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