如何在以下代码中打印ip?

时间:2017-04-13 13:20:53

标签: python

我无法在以下IF条件下打印IP

def call_openNMS_service(node):

      #print node
      url = "http://localhost:8980/opennms/rest/nodes/{}/ipinterfaces/{}/services"
      dict_urls = [url.format(i, j) for i, j in zip(node["id"], node["ip"])]
      print dict_urls
      headers = {"Accept": "application/json"}
      for url in dict_urls:
          x = requests.get(url, headers=headers, auth=("admin", "0p35"))
          parsed = json.loads(x.content)
          ##print json.dumps(parsed, indent=4, sort_keys=True)
          for i in parsed["service"]:
              #print i["serviceType"]["name"]
              if i["serviceType"]["name"] == "SSH":    # So if i find SSH i print the node[ip]
                 print node["ip"]  ## this is where it should just print the one IP which has SSH running
              else:
                 print "No IP found with SSH running"

但这会打印出ip的序列,而不是特定的IP

node = {
    'ip': [u'10.21.204.174', u'10.21.205.148', u'10.21.50.153', u'10.21.50.192', u'10.21.50.198', u'10.21.51.149', u'10.21.51.158', u'10.21.51.200', u'10.21.51.252', u'10.21.52.202', u'10.21.52.53', u'10.21.54.12', u'10.21.54.149', u'10.21.55.132', u'10.21.55.176', u'10.21.55.239', u'10.21.56.169', u'10.21.56.48', u'10.21.65.106', u'10.21.65.125', u'10.21.65.34', u'10.21.67.131', u'10.21.67.179', u'10.21.67.194', u'10.21.67.230', u'10.21.67.249', u'10.21.67.45', u'10.21.67.70', u'10.21.68.127', u'10.21.68.180', u'10.21.68.73', u'10.21.69.200', u'10.21.69.38', u'10.21.70.121', u'10.21.70.56'],
    'id': [u'564', u'561', u'462', u'389', u'352', u'353', u'390', u'354', u'356', u'454', u'348', u'349', u'455', u'563', u'359', u'360', u'363', u'362', u'525', u'426', u'503', u'466', u'431', u'527', u'529', u'373', u'414', u'518', u'430', u'425', u'413', u'368', u'404', u'517', u'502']
}

1 个答案:

答案 0 :(得分:3)

正如所写,for循环中唯一拥有单个IP的地方嵌入url。看起来你最好绕过zip()本身,而不是使用dict_urls作为中间人。失去这两行:

dict_urls = [url.format(i,j) for i,j in zip(node['id'], node['ip'])]
print dict_urls

然后修改您的for循环以遍历node元素并在循环中形成您的网址:

for nodeid, nodeip in zip(node['id'], node['ip']):
    nodeurl = url.format(nodeid, nodeip)

url中对nodeurl的所有引用替换为url(需要更改名称,以免覆盖print nodeip 模板)。然后,当您想要打印IP时,只需:

def call_openNMS_service(node):
    url = "http://localhost:8980/opennms/rest/nodes/{}/ipinterfaces/{}/services"
    headers = {"Accept": "application/json"}
    for nodeid, nodeip in zip(node['id'], node['ip']):
        nodeurl = url.format(nodeid, nodeip)
        x = requests.get(nodeurl, headers=headers, auth=("admin", "0p35"))
        parsed = json.loads(x.content)
        for i in parsed["service"]:
            if i["serviceType"]["name"] == "SSH":
                print nodeip
            else:
                print "No IP found with SSH running"

以下是最终修改后的代码的外观:

net.jini.core.lookup.ServiceRegistrar