2017-06-02 2 views
1

Je suis novice en programmation. Face à un tel problème. Les serveurs de surveillance utilisent-ils Zabbix? Il a sa propre API. Le défi est à travers un script en Python pour se connecter au serveur de surveillance et obtenir des informations sur les imprimantes et leurs compteurs et mettre dans le fichier. Le fichier de sortie doit avoir le format:Formater les données de sortie

Nom de l'imprimante \ onglet compteur imprimante

Comme ça:

HP1212 124512

me connecter et recevoir des données, mais ne peut pas enregistrer dans deux colonnes à l'aide d'un '\ t'. Mon code:

`

from pyzabbix import ZabbixAPI 
zapi = ZabbixAPI("http://*****/zabbix") 
zapi.login("******", "*******") 
item_name='Print_counter' 
hosts = zapi.host.get(        #get printers name 
       groupids=8, 
       output=['name']) 
items = zapi.item.get(        #get printers counter 
       groupids=8, 
       output=['lastvalue'], 
       filter={'name':item_name})` 

Je comprends que le problème est probablement trivial, mais comment résoudre je ne sais pas.

J'ai effectué ma question:

Si l'utilisation im: for host in hosts: a = host['name'] print a .. Je reçois:

tpr001 
tpr002 
... 
tpr020 

il mes imprimantes.

Si j'utilise: for item in items: b = host['value'] print b je reçois:

12456 
34645 
... 
56468 

Il compteurs de mes imprimantes.

Je veux groupe la sortie de ma requête comme ceci:

tpr001 12456 
tpr002 34645 
...  ... 
tpr020 56468 
+0

Et si je peux utiliser pour la sortie: pour l'hôte dans les hôtes: pour produit en: hôte d'impression [ « nom »], « \ t », point [ « lastvalue » ] Il me donne une répétition des noms d'imprimantes dans une colonne et des données mélangées – komito

Répondre

1

Je pense que vous avez besoin de quelque chose comme ceci:

for host in hosts: 
    a=host['name'] 
    for item in items: 
     b=item['lastvalue'] 
     print a,'\t',b` 
0

Je ne sais pas ce qui est donné par votre zapi exactement. host.get et zapi.item.get, mais vos boucles ne fonctionnent pas, comme vous vous y attendez. Dans votre première boucle a obtient une nouvelle valeur dans chaque cycle afin que vous trouviez la dernière valeur, si la boucle se termine. Et à cause de votre commande d'impression après la boucle, vous voyez exactement cette valeur.

Peut-être que vous devriez mettre deuxième boucle dans le premier comme

for host in hosts: 
    a=host['name'] 
    for item in items: 
     b=item['lastvalue'] 
     print a,'\t',b` 

Mais dans ce cas, vous combiner chaque ligne d'hôtes à chaque rangée d'éléments. Peut-être votre items.get- commande a besoin de filtre du nom, quelque chose comme

for host in hosts: 
    a=host['name'] 
    items = zapi.item.get(   #get printers counter 
      groupids=8, 
      output=['lastvalue'], 
      filter={'name':a}) 

Peut-être que vous ne même pas besoin de demander des hôtes, parce que toutes vos informations sont des éléments à l'intérieur

for item in items: 
    b=item['lastvalue'] 
    a=item['name'] 
    print a,'\t',b 

Hope, cela aide, mais je pense que vous devriez apprendre les bases de la programmation, si vous voulez aller plus loin (et c'est plus facile à comprendre, si vous donnez des noms parlants au lieu de a et b, non seulement nous comprenons mieux ce que vous attendez

+0

J'ai édité la question, il serait clair que je reçois la sortie. – komito

+0

Et vous êtes vraiment sûr, que vous obtenez des noms et des dernières valeurs dans le même ordre? Il n'y a aucun moyen de demander un nom d'imprimante spécial? Essayez pour l'article dans les articles: imprimer article à voir, ce que vous obtenez – am2

0

Cela semble étrange de moi, que vous voulez compter sur l'ordre de sortie de deux listes différentes.Mais si, vous pouvez essayer

for i in range(len(Hosts)): 
    host = Hosts[i] 
    item = Items[i] 
    a=host['name'] 
    b=item['lastvalue'] 
    print a,'\t',b