我正在处理一个小型python脚本,该脚本应从icinga服务器返回一个数据列表-我可以使用curl进行工作,但是我需要使用Python。这是curl版本:
$ curl -k -s -u karl:marx -H 'Accept: application/json' -H 'X-HTTP-Method-Override: GET' -X POST 'https://zenoss.hpc.ic.ac.uk:5665/v1/objects/services' -d '{ "filter": "service.state==state && match(pattern,service.name)", "filter_vars": { "state": 2, "pattern": "*checkmem" } }' | jq '.results[].attrs | [.host_name, .name, .last_check_result.output] | @csv' | sed -e 's/.cx1.hpc.ic.ac.uk//g' -e 's/\\n/\n/g' -e 's/\"\\\"//g' -e 's/\\\",\\\"/\n/g' -e 'a ------'
我相信可以实现的python脚本是:
$ cat icinga_report
#!/usr/bin/python
import requests
import json
import sys
if len(sys.argv)==3:
state=int(sys.argv[1])
service=sys.argv[2]
else:
print 'Usage: icinga_report state service'
sys.exit()
hdr={
'Accept':'application/json',
'X-HTTP-Method-Override':'GET'
}
aut=(
'karl',
'marx'
)
url='https://zenoss.hpc.imperial.ac.uk:5665/v1/objects/services'
dat={
'filter':'service.state==state && match(pattern,service.name)',
'filter_vars':{
'state':int('%d'%state),
'pattern':'*%s'%service
}
}
res=requests.post(
url,
headers=hdr,
auth=aut,
data=json.dumps(dat)
)
print res
但是,运行脚本的输出:
$ ./icinga_report 2 checkmem
<Response [200]>
实际上,如果我使用任何其他有效的URL,看起来就一样—我只得到响应代码。我在做什么错了?
答案 0 :(得分:2)
requests.post
返回一个requests.Response
对象。如果要查看响应的内容,则应改为输出其content
属性:
print res.content