【问题标题】:Format the output data格式化输出数据
【发布时间】:2017-06-02 08:49:19
【问题描述】:

我是编程新手。面对这样的问题。正在使用 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})`

我知道这个问题很可能是微不足道的,但我不知道如何解决。

我编辑了我的问题:

如果我使用: 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

【问题讨论】:

  • 如果我用于输出:for host in hosts: for item in items: print host['name'],'\t',item['lastvalue'] 。它让我重复列中的打印机名称和混合数据

标签: python zabbix


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我不知道你的 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,所以不仅我们更好地理解,你的期望

    【讨论】:

    • 我已经编辑了问题,很明显我得到了输出。
    • 你真的确定,你得到的名字和lastvalues的顺序是一样的吗?有没有办法要求一个特殊的打印机名称? Try for item in items:打印项目看看,你得到了什么
    【解决方案3】:

    对我来说这听起来很奇怪,你想依赖两个不同列表的输出顺序。但如果是这样,你可以试试

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

    【讨论】:

      猜你喜欢
      • 2011-10-31
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多