在红色帽子杂志的一篇最近文章由诺亚・ Gift和Grig称“这的Gheorghiu不是您的被展示的grandpappy'd dd命令如何使用Python、dd公共事业和Google图API导致显示生产量的长条图在不同的字区大小。 然而从Python剧本的产品是没有实际图表,而是您必须然后黏贴入浏览器观看发生的图的URL。
我,虽然这个剧本是有用的,但是没有想必须剪贴URL入浏览器,因此我决定消灭那步。
这个Python剧本根据他们的剧本宽松地,但是用途Python urllib图书馆连接到Google绘制引起使用pyGTK+惯例,后来被显示的PNG图象文件。 #! /usr/bin/env Python进口sys进口os进口命令从optparse进口OptionParser进口urllib进口urllib2进口pygtk pygtk.require (‘2.0 ′)进口gtk类DisplayGraph的进口稀土: delete_event的def (自已、装饰物、事件, data=None) : 回归错误def毁坏(自已、装饰物, data=None) : gtk.main_quit () def __init (自已) : self.window = gtk。窗口(gtk.WINDOW_TOPLEVEL) self.window.connect (“delete_event”, self.delete_event) self.window.connect (“毁坏”, self.destroy) self.window.set_border_width (10) self.window.set_position (gtk.WIN_POS_CENTER) self.window.set_title (“盘生产量") pixbuf = gtk.gdk.pixbuf_new_from_file (“/tmp/dd.png ") os.remove (“/tmp/dd.png ") self.image = gtk。图象() self.image.set_from_pixbuf (pixbuf) self.image.sh ow () self.window.add (self.image) self.window.sh ow () def扼要(自已) : gtk.main ()类GoogleChart : def __init (自已) : self.gchart_url = “http://chart.apis.google.com/chart ?” self.gchart_type = “cht=bvs” self.gchart_title = “&chtt=” self.gchart_data = “&chd=t :” self.gchart_labels = “&chxl=0 :|” self.gchart_size = “&chs=400×250 ″ self.gchart_axis_labels = “&chxt=x, y, x, y” self.gchart_axis_position = “&chxp=2,50|3,50 ″ self.gchart_bar_settings = “&chbh=30,15 ″ def标题(自已,标题) : self.gchart_title = self.gchart_title +标题def写(自已、数据、标签, max_t) : self.gchart_data = self.gchart_data + data.rstrip (`‘) self.gchart_labels = self.gchart_labels \ +标记+ “2 :|Block%20Size|3 :|Mb/s” self.gchart_axis_range = “&chxr=1,0”, + str (max_t+10.0) self.gchart_scaling = “&chds=0”, + str (max_t+10.0) self.gchart_url += self.gchart_type \ + self.gchart_title + self.gchart_size self.gchart_url += self.gchart_bar_settings \ + self.gchart_data + self.gchart_labels self.gchart_url += self.gchart_axis_labels \ + self.gchart_axis_position self.gchart_url += self.gchart_axis_range \ + self.gchart_scaling 开启者= urllib2.urlopen (self.gchart_url) 如果opener.headers [‘内容类型’]! = `图象或png': 培养BadContentTypeException (`服务器responded \ ‘与%s的内容类型\ % opener.headers [‘内容类型’]) 打开(“/tmp/dd.png”, `wb').write (opener.read ()) def get_disk_throughput (设备,字区大小) : 字区大小= str (字区大小) + `k cmd = “dd if=/dev/zero of=%s bs=%s” % (设备,字区大小) 产品= commands.getoutput (cmd) 生产量= 0 单位= “” 为在output.split (`n')的线: s = re.search (`复制了。*, (\ S+) (\ S+) $ ',线) 如果s : 生产量= s.group (1) 单位= s.group (2) 断裂 如果__name == “__main”,返回(生产量,单位) : 用法= “用法: %prog选择” 分析器= OptionParser (usage=usage) parser.add_option (“- d”, “-设备”, dest=”设备”, \ 使用的help=”设备。 盘数据将重写! ") (选择, args) = parser.parse_args () 设备= options.device 如果不是设备: parser.print_help ()

























