2017-06-02 123 views
1

我是編程的新手。面對這樣的問題。正在使用Zabbix監控服務器。它有它自己的API。面臨的挑戰是通過Python中的腳本連接到監視器服務器並獲取有關打印機及其計數器的信息並放入文件中。輸出文件的格式應爲:格式化輸出數據

名打印機\標籤計數器打印機

就像是:

HP1212 124512

我連接和接收數據,但使用不能將它記錄在兩列'\ T'。 我的代碼:

`

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})` 

據我所知,這個問題可能是微不足道的,但如何解決,我不知道。

我編輯我的問題:

,如果im使用: for host in hosts: a = host['name'] print a ..我得到:

tpr001 
tpr002 
... 
tpr020 

是我的打印機。

如果我使用: for item in items: b = host['value'] print b 我得到:

12456 
34645 
... 
56468 

它反駁了我的打印機。

我想組我的查詢像這樣的輸出:

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

如果我使用的輸出:在主機主機: 對於項目中的項目: 打印主機[「名」],「\ t」,項[「lastvalue」 ]。它給了我一個重複的列中的打印機名稱和混合數據 – komito

回答

1

我想你需要的東西是這樣的:

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

我不知道到底是你的ZAPI給出什麼。 host.get和zapi.item.get,但你的循環不工作,如你所願。 在您的第一個循環中,每個循環中都會獲取一個新值,以便在循環結束時找到最後一個值。由於循環後的打印命令,您可以看到確切的值。

也許你應該把第二個循環到第一像

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

但在這種情況下,你的每一行從主機與項目各行結合起來。 也許你items.get-命令需要名ES過濾器,像

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

也許你甚至都不需要問主人,因爲所有的信息都在裏面的物品

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

希望,這有幫助,但我認爲你應該學習編程的基礎知識,如果你想進一步學習(並且更容易理解,如果你給出口語名稱而不是a和b,那麼不僅我們更好理解,你期望的是什麼

+0

我編輯了這個問題,很明顯,我得到的輸出。 – komito

+0

你真的確定,你得到的名字和lastvalues在同一順序?有沒有辦法要求一個特殊的打印機名稱?嘗試項目中的項目:打印項目看,你得到什麼 – am2

0

這聽起來很奇怪我,你要依靠兩個不同列表的輸出順序。但是,如果是的話,你可以嘗試

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