查询我的内部API时,我得到了一堆响应。这些回复将告诉我特定服务是否上升/下降。
卷曲命令:
curl https://myinternalapi.example.com/Ping/1.1
输出:
<?xml version="1.0" encoding="UTF-8"?><ping><service name="FBcheckOnline" status="down"/><service name="APICheckOn" status="up"/></ping>
我想使用Python / Bash解析输出数据。解析数据后,我可以创建if
语句来检查特定服务是启动还是关闭。
所需的输出类似于:
FBcheckOnline down
APICheckOn up
我怎样才能使用Python(2.7)或Bash?
编辑1 :我设法使用Python 2.7
from xml.dom import minidom
xmldoc = minidom.parse('test.xml')
items = xmldoc.getElementsByTagName('service')
for item in items:
print item.attributes['name'].value,
print item.attributes['status'].value
但是,我试图让它从curl
命令而不是文件解析数据...或者使用curl命令将输出发送到文件然后读取它。
答案 0 :(得分:1)
我设法通过以下方式得到了我需要的东西:
#!/usr/bin/python
#
#
from xml.dom import minidom
import subprocess
p = subprocess.Popen("curl -s https://api.example.com/Ping/1.1 > curl_api_output_3.xml", stdout=subprocess.PIPE, shell=True)
(output, err) = p.communicate()
xmldoc = minidom.parse('curl_api_output_3.xml')
items = xmldoc.getElementsByTagName('service')
for item in items:
print item.attributes['name'].value,
print item.attributes['status'].value
您可以随意发表评论,因为我是Python新手。
答案 1 :(得分:1)
不完全解析XML,但如果输出格式一致,您可以尝试类似
的内容curl -Ssk https://myinternalapi.example.com/Ping/1.1 | tr '<|/' '\n' | grep ^service | tr '+|=|"' ' ' | awk '{print $3, $NF}'