如何使Python脚本优雅地输出结果
作为一名运维人员,在实际工作中经常会写一些监控脚本,用于方便、快捷地进行服务器监控、操作。这个操作如何使输出...
作为一名运维人员,在实际工作中经常会写一些监控脚本,用于方便、快捷地进行服务器的监控和操作。那什么样的操作才能使输出结果更加优雅、简洁呢?
今天与大家分享一些我在实际过程使用Python监控输出这块的心得,与正在使用或即将学习使用Python的运维人员进行一点儿交流。
需求:
进行MySQL数据库的库表进行统计输出库名、表名、行数、平均行长、数据大小、索引大小
需求比较简单,并且对运维人员也比较常见,最直接的方法是直接入库,这样基本就是简单的查询与写入操作。但是,我们现在需要输出结果。
当开始写第一个版本的时候,我是这样处理的——即写shell那种实现方式,输出占位长度左右对齐。但是总觉得不够完美,原因是各个库的数据长度并不一样,随意调整但是并不能满足所有库的情况。如果凑合使用也是可以的,但是能不能变得智能呢?
在这个目的驱动下,我发现了它 —— PrettyTable,使用很简单,安装、导入。
上代码
【核心相关部分】
sql = """SQL STRING"""
x =PrettyTable(["TABLE_SCHEMA","Table_NAME","AVG_ROW_LENGTH","TABLE_ROWS", "Data (MiB)", "Index (MiB)"])
x.align["TABLE_SCHEMA"] = "l"
x.align["Table_NAME"] = "l"
x.align["AVG_ROW_LENGTH"] = "l"
x.align["TABLE_ROWS"] = "l"
x.align["Data (MiB)"] = "l"
x.align["Index (MiB)"] = "l"
x.padding_width = 1
try :
cursor.execute(sql)
for din cursor.fetchall():
x.add_row([d["TABLE_SCHEMA"],d["Table"],d["AVG_ROW_LENGTH"],d["TABLE_ROWS"],d["Data(MiB)"],d["Index (MiB)"]])
except Exception,e:
print Exception,":",e
输出如下:
对于MySQL DBA是不是有种很熟悉的味道?
这样我们不用复杂定义格式了,仅仅需要了解如何使用PrettyTable即可。当然Stack Overflow上面有大神任性地写代码输出,同样可以得到上面的效果。
【这里先默默崇拜地赞一下...】
这样就能让我满意吗?我们运维人员肯定不是这么容易满足的。因为从上述代码来看至少需要一行一行地定义,假如中间SQL列增加或减少,又要重新定义?也许你可能会说,直接入库不就行吗?那么我只能呵呵了……
现在的需求是这样的:
不知列名与列数情况下也能完美输出上面的格式,并且完美程度不能减少【必须的】
改代码如下:
sql = """SQL STRING"""
try :
cursor.execute(sql)
table.field_names=[col[0]for col in cursor.description]
forcolumn in table.field_names:
table.align[column]='l'
for rowin cursor.fetchall():
table.add_row(row)
exceptException,e:
print Exception,":",e
然后输出依然如下 【用上面截图就行了,不用重新运行了】
这样是不是更加简洁了,代码也更加少了。
说起PrettyTable突然想起一首歌 Pretty Boy 听一听吧?
(图片来自互联网)
PrettyTable下载地址:https://pypi.python.org/pypi/PrettyTable
关注 GTC学堂
微信扫一扫关注公众号