Python表格库prettytable使用

  • 生产实践

    用于获取节点和机器信息,输出结果用表格打出

  • 脚本内容:      

PrettyTable 是用于生成简单 ASCII 表的 Python 库。 它的灵感来自 PostgreSQL shell psql 中使用的 ASCII 表。 我们可以控制表格的许多方面,例如列填充的宽度,文本的对齐方式或表格边框。 我们可以对数据进行排序。我们还可以选择在最终输出中将显示哪些列和行。 PrettyTable 可以从 CSV,HTML 或数据库光标读取数据,并以 ASCII 或 HTML 输出数据

使用prettytable可以让脚本的输出更简洁,漂亮。脚本内容如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time    : 2019-09-04
# @Author  : Anzhihe
# @Site    : https://chegva.com
# @File    : prettytable.py

import requests
import json
import sys
import prettytable as pt
import argparse


headers = {
    'Accept': "application/json, text/javascript, */*; q=0.01",
    'Referer': "http://chegva.com/static/index.html",
    'X-Requested-With': "XMLHttpRequest",
    'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36",
    'cache-control': "no-cache",
    'Connection': "keep-alive",
    'Cookie': "yourcookie"
    }
    
    
class Pdl:

    arr = []
    arr_su = []
    arr_port = []
    arr_level = []
    arr_creator = []
    arr_updated = []
    
    def __init__(self):
        pass
        
    def get_host(host):
        url = "http://chegva.com/api/v1/xxx/list"
        querystring = {"hostnames": host}
        response = requests.request("GET", url, headers=headers, params=querystring)
        list_host = json.loads(response.text)
        for n, host in enumerate(list_host):
            tb.add_row([ host["hostname"], host["ip"], '\n'.join(host["nsList"])])
        for tree in list_host[0]['nsList']:
            Pdl.get_tree(host, tree)
            
        tb.add_column('level',["\n".join('%s' %id for id in Pdl.arr_level)])
        tb.add_column('su',["\n".join('%s' %id for id in Pdl.arr_su)])
        tb.add_column('status',["\n".join('%s' %id for id in Pdl.arr)])
        if any(Pdl.arr_port):
            tb.add_column('port',["\n".join('%s' %id for id in Pdl.arr_port)])
        if any(Pdl.arr_creator):
            tb.add_column('last_deploy',["\n".join('%s' %id for id in Pdl.arr_creator)])
        if any(Pdl.arr_updated):    
            tb.add_column('last_updated',["\n".join('%s' %id for id in Pdl.arr_updated)])
        tb.align = "l"
        print(tb)
    
    def get_tree(host, treepath):
        url = "http://chegva.com/api/xxx/info"
        querystring = {"ns": treepath}
        response = requests.request("GET", url, headers=headers, params=querystring)
        treeinfo = json.loads(response.text)
        parent_tree = treeinfo['parent']
        Pdl.arr_su.append(treeinfo['su'])
        Pdl.arr_level.append(treeinfo['serviceLevel'])
        Pdl.arr_port.append(treeinfo['port'])
        Pdl.get_deploy_info(parent_tree)
        for key in treeinfo.keys():
            if key == treeinfo['serviceLevel']:
                print(treeinfo[key])
                col_list = treeinfo[key].split()
                print(col_list)
                Pdl.arr_su.append(treeinfo[key].split())
        url1 = "http://chegva.com/api/v3/xxx/query"
        querystring1 = {"su": treeinfo['su']}
        response = requests.request("GET", url1, headers=headers, params=querystring1)
        hosts = json.loads(response.text)
        host_info = ['hostname', 'ip', 'code_msg']
        a = []
        for i in hosts['instances']:
            for key,value in i.items():
                if key in host_info:
                    a.append(value)
        idx = a.index(host['hostname'])
        Pdl.arr.append(a[idx+2])
    
    def show_tree(treepath):
        url = "http://chegva.com/api/v1/xxx/info"
        querystring = {"ns": treepath}
        response = requests.request("GET", url, headers=headers, params=querystring)
        treeinfo = json.loads(response.text)
        parent_tree = treeinfo['parent']
        Pdl.get_deploy_info(parent_tree)
        tree_info = ['su', 'port', 'serviceLevel', 'name']
        for key in treeinfo.keys():
            if key in tree_info:
                col_list = treeinfo[key].split(' ',0)
                if any(col_list):
                    tb1.add_column(key,col_list)
        Pdl.show_host(treeinfo['su'])
        if any(Pdl.arr_creator):
            tb1.add_column('last_deploy',["\n".join('%s' %id for id in Pdl.arr_creator)])
        if any(Pdl.arr_updated):    
            tb1.add_column('last_updated',["\n".join('%s' %id for id in Pdl.arr_updated)])
        tb1.align = "l"
        print(tb1)
        
    def show_host(su):
        url = "http://chegva/api/v3/xxx"
        querystring = {"su": su}
        response = requests.request("GET", url, headers=headers, params=querystring)
        hosts = json.loads(response.text)
        host_info = ['hostname', 'ip', 'code_msg']
        a = []
        step = 3
        for i in hosts['instances']:
            for key,value in i.items():
                if key in host_info:
                    a.append(value)
        b = [ a[i:i+step] for i in range(0,len(a),step)]
        tb1.add_column('host',["\n".join('%s' %id for id in b)])
        
    def get_deploy_info(parent_tree):
        url = "http://chegva.com/deploy/jobs/all/json"
        querystring = {"limit":"1","ns": parent_tree}
        response = requests.request("GET", url, headers=headers,  params=querystring)
        deployinfo = json.loads(response.text)
        if deployinfo['data']:
            Pdl.arr_creator.append(deployinfo['data'][0]['creator'])
        if deployinfo['data']:
            Pdl.arr_updated.append(deployinfo['data'][0]['updated'].split()[0])
            
            
if __name__ == '__main__':
    parser = argparse.ArgumentParser(description="Query info of host or service tree")
    parser.add_argument('para', nargs='+', 
                    help='hostname | treepath')
    args = parser.parse_args()
    host_tree = args.para[0]
    
    tb = pt.PrettyTable()
    tb.field_names = [ "主机名", "IP", "节点列表"]
    tb.align = "l"
    tb.padding_width = 0
    tb1 = pt.PrettyTable()
    tb1.align = "l"
    tb1.padding_width = 0
  
    pdl = Pdl()
    if str(host_tree).endswith('.com'):
        Pdl.show_tree(host_tree)
    else:
        Pdl.get_host(host_tree)

◎查看效果

Python表格库prettytable使用


参考:

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/3894.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注