格式化输出数据

时间:2017-06-02 08:49:19

标签: python zabbix

我是编程新手。面对这样的问题。使用Zabbix监控服务器。它有自己的API。挑战在于通过Python中的脚本连接到监视器服务器并获取有关打印机及其计数器的信息并放入文件中。输出文件的格式应为:

命名打印机\ tab计数器打印机

就像那样:

HP1212 124512

我连接并接收数据,但无法使用'\ t'将其记录在两列中。 我的代码:

`

Select BASE, CELL_CODE , MIN(START_DATE),MAX(END_DATE) from PROMO
group by BASE, CELL_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})` ..我得到:


for host in hosts:
        a = host['name']
        print a
是我的打印机。

如果我使用:tpr001 tpr002 ... tpr020 我明白了:


for item in items:
        b = host['value']
        print b

它反击我的打印机。

我想将查询的输出分组如下:

12456
34645
...
56468

3 个答案:

答案 0 :(得分:1)

我认为你需要这样的东西:

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

答案 1 :(得分:0)

我不知道你的zapi.host.get和zapi.item.get究竟给出了什么,但你的循环不能正常工作,正如你所期望的那样。 在第一个循环中,a在每个循环中获取一个新值,以便在循环结束时找到其中的最后一个值。并且由于循环后的打印命令,您会看到确切的值。

也许你应该把第二个循环放到第一个循环中,如

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,那么我们不仅要更好地理解,你期待什么

答案 2 :(得分:0)

我觉得很奇怪,你想要依赖两个不同列表的输出顺序。但如果是这样,你可以尝试

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