Недавняя статья в красной кассете шлема Noah Подарком и Grig вызванным Gheorghiu «этим нет вашей продемонстрированной команды dd grandpappy'd как использовать питона, общее назначение dd и диаграмму API Google для того чтобы произвести диаграмму в виде вертикальных полос показывая объём на различных размерах блока. Однако выход от сценария питона был не фактической диаграммой а URL который вы после этого должны наклеить в браузер паутины для того чтобы осмотреть приводя к диаграмму.
I хотя этот сценарий был бы полезн но не хотел бы отрезать И наклеить URL в браузер поэтому меня паутины решило исключить тот шаг.
Этот сценарий питона свободно основан на их сценарии но пользы архивы urllib питона соединиться к Google составляют схему для того чтобы произвести архив изображения PNG который затем показан используя режимы pyGTK+. #! re ввоза команд ввоза os ввоза sys ввоза питона /usr/bin/env от типа DisplayGraph gtk ввоза pygtk pygtk.require ввоза ввоза urllib2 urllib ввоза OptionParser ввоза optparse ('′ 2.0): def delete_event (собственная личность, widget, случай, data=None): возвращенное ложное def разрушает (собственная личность, widget, data=None): __init def gtk.main_quit () (собственная личность): 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) ow self.image.sh () self.window.add (self.image) основа def ow self.window.sh () (собственная личность): тип GoogleChart gtk.main (): __init def (собственная личность): 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 = «название def ″ &chbh=30,15 (собственная личность, название): 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 ()) get_disk_throughput def (прибор, размер блока): размер блока = 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) пролом возвратите (объём, блок) если == «__main» __name:, то использование = «использование: варианты %prog» парсер = OptionParser (usage=usage) parser.add_option («- d», «- прибор»,» прибора» dest= \ прибор help=», котор нужно использовать. Данные по диска будут переписываны! ") (варианты, args) = parser.parse_args () прибор = options.device если не прибор:, то parser.print_help ()

























