Un article récent dans la Revue de Chapeau Rouge par Noé Cadeau et Grig Gheorghiu a appelé “This isn’t votre grandpappy’d ordre de dd a démontré comment utiliser le Python, l'utilité de dd et l'API de Graphique de Google pour produire un débit de démonstration de graphique de barre aux tailles de bloc différentes. Cependant la production du manuscrit de Python n'était pas le véritable graphique mais une URL que vous avez dû coller alors dans un navigateur Web pour regarder le graphique résultant.
Je bien que ce manuscrit serait utile mais n'a pas désiré avoir pour couper et coller une URL dans un navigateur Web si j'ai décidé d'éliminer cette étape.
Ce manuscrit de Python est lâchement fondé sur leur manuscrit mais utilise les bibliothèques d'urllib de Python pour connecter aux Graphiques de Google pour produire un dossier d'image de PNG qui est affiché utilisant par la suite pyGTK + les routines. L'importation de sys d'importation de python de #!/usr/bin/env ordres d'importation de système d'exploitation importent re de l'urllib d'importation d'OptionParser d'importation d'optparse pygtk.require(’2.0′) de pygtk d'importation d'urllib2 d'importation DisplayGraph de classe de gtk d'importation : def efface_l'événement (soi, le bidule, l'événement, data=None) : Retourner def Faux détruit (soi, le bidule, data=None) : Gtk. principal_a cessé () def __init__(self): La soi.fenêtre = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect(“delete_event”, soi. efface_l'événement) self.window.connect(“destroy”, détruit automatiquement) le Débit de self.window.set_title(“Disk de self.window.set_position(gtk.WIN_POS_CENTER) de self.window.set_border_width(10)”) pixbuf = gtk.gdk.pixbuf_new_from_file(“/tmp/dd.png”) os.remove(“/tmp/dd.png”) soi.image = gtk.Image() self.image.set_from_pixbuf(pixbuf) soi. l'image. le spectacle () self.window.add(self.image) soi. la fenêtre. le spectacle () def main(self) : Gtk.main() GoogleChart de classe : def __init__(self): Soi. gchart_url = “http://chart.apis.google.com/chart?” soi. gchart_le type = “cht=bvs” soi. gchart_le titre = “&chtt=” soi. gchart_les données = “&chd=t:” soi. gchart_les étiquettes = “&chxl=0:|” soi. gchart_la taille = “&chs=400×250″ soi. gchart_l'axe_les étiquettes = “&chxt=x,y,x,y” soi. gchart_l'axe_la position = “&chxp=2,50|3,50″ soi. gchart_barre_les paramètres = “&chbh=30,15″ titre de def (soi, le titre) : Soi. gchart_le titre = soi. gchart_le titre + def de titre écrit (soi, les données, étiquète, max_t) : Soi. gchart_les données = soi. gchart_les données + data.rstrip(‘,’) soi. gchart_les étiquettes = soi. gchart_les étiquettes \ + les étiquettes + “2:|Block%20Size|3:|Mb/s” soi. gchart_l'axe_la gamme = “&chxr=1,0,” + str(max_t+10.0) soi. gchart_graduant = “&chds=0,” + str(max_t+10.0) soi. gchart_url += soi. gchart_le type \ + soi. gchart_le titre + soi. gchart_soi calibre. gchart_url += soi. gchart_la barre_les paramètres \ + soi. gchart_les données + soi. gchart_soi étiquète. gchart_url += soi. gchart_l'axe_les étiquettes \ + soi. gchart_l'axe_soi dispose. gchart_url += soi. gchart_l'axe_la gamme \ + soi. gchart_graduant l'ouvre-boîtes = urllib2.urlopen(self.gchart_url) si opener.headers[ le contenu-type ] = ! ‘image/png’: Elever BadContentTypeException (‘Server a répondu’ \ ’with un contenu-type de %s’ \ % opener.headers[ le contenu-type ]) ouvre (“/tmp/dd.png”, ‘wb’).write(opener.read()) def obtient_le disque_le débit (l'appareil, blocksize) : Blocksize = str (blocksize) + ‘k’ cmd = “dd si = /dev/zéro de = % b de s = %s” % (l'appareil, blocksize) la production = les ordres. getoutput (cmd) le débit = 0 unité = “” pour la ligne dans output.split(‘n’): Le s = re.search(‘ a copié, .*, (\le S +) (\S+)$’, ligne) si le s : Le débit = s.group(1) unité = s.group(2) retour de coupure (le débit, l'unité) si __le nom__ == “__main__”: Usage = “Usage: % Les options de prog” analyseur = OptionParser (l'usage = l'usage) parser.add_option(“-d”, “–device”, dest = ”device”, \ l'aide = ”Device pour utiliser. Les données de disque seront superposées ! ”) (les options, args) = l'analyseur. analyse_args () l'appareil = l'options.appareil si pas l'appareil : l'analyseur. les caractères_aide ()

























