如何使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学堂


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册