c20f60
make btt scripts python3-ready
c20f60
c20f60
Many distributions are moving to python3 by default.  Here's
c20f60
an attempt to make the python scripts in blktrace python3-ready.
c20f60
c20f60
Most of this was done with automated tools.  I hand fixed some
c20f60
space-vs tab issues, and cast an array index to integer.  It
c20f60
passes rudimentary testing when run under python2.7 as well
c20f60
as python3.
c20f60
c20f60
This doesn't do anything with the shebangs, it leaves them both
c20f60
invoking whatever "env python" coughs up on the system.
c20f60
c20f60
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
c20f60
---
c20f60
c20f60
I am not a python guru at all. Happy to have review by anyone more
c20f60
pythonic than I am.  Hopefully this helps at least move things
c20f60
toward python3-readiness.  Thanks!
c20f60
c20f60
Index: blktrace-1.2.0/btt/bno_plot.py
c20f60
===================================================================
c20f60
--- blktrace-1.2.0.orig/btt/bno_plot.py
c20f60
+++ blktrace-1.2.0/btt/bno_plot.py
c20f60
@@ -1,4 +1,4 @@
c20f60
-#! /usr/bin/env python
c20f60
+#!/usr/bin/python3
c20f60
 #
c20f60
 # btt blkno plotting interface
c20f60
 #
c20f60
@@ -38,6 +38,8 @@ automatically push the keys under the gr
c20f60
 To exit the plotter, enter 'quit' or ^D at the 'gnuplot> ' prompt.
c20f60
 """
c20f60
 
c20f60
+from __future__ import absolute_import
c20f60
+from __future__ import print_function
c20f60
 import getopt, glob, os, sys, tempfile
c20f60
 
c20f60
 verbose	= 0
c20f60
@@ -60,14 +62,14 @@ def parse_args(in_args):
c20f60
 
c20f60
 	try:
c20f60
 		(opts, args) = getopt.getopt(in_args, s_opts, l_opts)
c20f60
-	except getopt.error, msg:
c20f60
-		print >>sys.stderr, msg
c20f60
-		print >>sys.stderr, __doc__
c20f60
+	except getopt.error as msg:
c20f60
+		print(msg, file=sys.stderr)
c20f60
+		print(__doc__, file=sys.stderr)
c20f60
 		sys.exit(1)
c20f60
 
c20f60
 	for (o, a) in opts:
c20f60
 		if o in ('-h', '--help'):
c20f60
-			print __doc__
c20f60
+			print(__doc__)
c20f60
 			sys.exit(0)
c20f60
 		elif o in ('-v', '--verbose'):
c20f60
 			verbose += 1
c20f60
@@ -84,10 +86,10 @@ if __name__ == '__main__':
c20f60
 	(bnos, keys_below) = parse_args(sys.argv[1:])
c20f60
 
c20f60
 	if verbose:
c20f60
-		print 'Using files:',
c20f60
-		for bno in bnos: print bno,
c20f60
-		if keys_below:	print '\nKeys are to be placed below graph'
c20f60
-		else:		print ''
c20f60
+		print('Using files:', end=' ')
c20f60
+		for bno in bnos: print(bno, end=' ')
c20f60
+		if keys_below:	print('\nKeys are to be placed below graph')
c20f60
+		else:		print('')
c20f60
 
c20f60
 	tmpdir = tempfile.mktemp()
c20f60
 	os.mkdir(tmpdir)
c20f60
@@ -99,7 +101,7 @@ if __name__ == '__main__':
c20f60
 		fo = open(t, 'w')
c20f60
 		for line in open(f, 'r'):
c20f60
 			fld = line.split(None)
c20f60
-			print >>fo, fld[0], fld[1], int(fld[2])-int(fld[1])
c20f60
+			print(fld[0], fld[1], int(fld[2])-int(fld[1]), file=fo)
c20f60
 		fo.close()
c20f60
 
c20f60
 		t = t[t.rfind('/')+1:]
c20f60
@@ -107,16 +109,16 @@ if __name__ == '__main__':
c20f60
 		else:                plot_cmd = "%s,'%s'" % (plot_cmd, t)
c20f60
 
c20f60
 	fo = open('%s/plot.cmds' % tmpdir, 'w')
c20f60
-	print >>fo, cmds
c20f60
-	if len(bnos) > 10 or keys_below: print >>fo, 'set key below'
c20f60
-	print >>fo, plot_cmd
c20f60
+	print(cmds, file=fo)
c20f60
+	if len(bnos) > 10 or keys_below: print('set key below', file=fo)
c20f60
+	print(plot_cmd, file=fo)
c20f60
 	fo.close()
c20f60
 
c20f60
 	pid = os.fork()
c20f60
 	if pid == 0:
c20f60
 		cmd = 'gnuplot %s/plot.cmds -' % tmpdir
c20f60
 
c20f60
-		if verbose: print 'Executing %s' % cmd
c20f60
+		if verbose: print('Executing %s' % cmd)
c20f60
 
c20f60
 		os.chdir(tmpdir)
c20f60
 		os.system(cmd)
c20f60
Index: blktrace-1.2.0/btt/btt_plot.py
c20f60
===================================================================
c20f60
--- blktrace-1.2.0.orig/btt/btt_plot.py
c20f60
+++ blktrace-1.2.0/btt/btt_plot.py
c20f60
@@ -1,4 +1,4 @@
c20f60
-#! /usr/bin/env python
c20f60
+#!/usr/bin/python3
c20f60
 #
c20f60
 # btt_plot.py: Generate matplotlib plots for BTT generate data files
c20f60
 #
c20f60
@@ -55,6 +55,10 @@ Arguments:
c20f60
   but the -o (--output) and -T (--title) options will be ignored.
c20f60
 """
c20f60
 
c20f60
+from __future__ import absolute_import
c20f60
+from __future__ import print_function
c20f60
+import six
c20f60
+from six.moves import range
c20f60
 __author__ = 'Alan D. Brunelle <alan.brunelle@hp.com>'
c20f60
 
c20f60
 #------------------------------------------------------------------------------
c20f60
@@ -82,7 +86,7 @@ get_base 	= lambda file: file[file.find(
c20f60
 def fatal(msg):
c20f60
 	"""Generate fatal error message and exit"""
c20f60
 
c20f60
-	print >>sys.stderr, 'FATAL: %s' % msg
c20f60
+	print('FATAL: %s' % msg, file=sys.stderr)
c20f60
 	sys.exit(1)
c20f60
 
c20f60
 #------------------------------------------------------------------------------
c20f60
@@ -163,7 +167,7 @@ def get_data(files):
c20f60
 		if not os.path.exists(file):
c20f60
 			fatal('%s not found' % file)
c20f60
 		elif verbose:
c20f60
-			print 'Processing %s' % file
c20f60
+			print('Processing %s' % file)
c20f60
 
c20f60
 		xs = []
c20f60
 		ys = []
c20f60
@@ -214,8 +218,8 @@ def parse_args(args):
c20f60
 
c20f60
 	try:
c20f60
 		(opts, args) = getopt.getopt(args[1:], s_opts, l_opts)
c20f60
-	except getopt.error, msg:
c20f60
-		print >>sys.stderr, msg
c20f60
+	except getopt.error as msg:
c20f60
+		print(msg, file=sys.stderr)
c20f60
 		fatal(__doc__)
c20f60
 
c20f60
 	for (o, a) in opts:
c20f60
@@ -293,15 +297,15 @@ def generate_output(type, db):
c20f60
 	def color(idx, style):
c20f60
 		"""Returns a color/symbol type based upon the index passed."""
c20f60
 
c20f60
-                colors = [ 'b', 'g', 'r', 'c', 'm', 'y', 'k' ]
c20f60
+		colors = [ 'b', 'g', 'r', 'c', 'm', 'y', 'k' ]
c20f60
 		l_styles = [ '-', ':', '--', '-.' ]
c20f60
 		m_styles = [ 'o', '+', '.', ',', 's', 'v', 'x', '<', '>' ]
c20f60
 
c20f60
 		color = colors[idx % len(colors)]
c20f60
 		if style == 'line':
c20f60
-			style = l_styles[(idx / len(l_styles)) % len(l_styles)]
c20f60
+			style = l_styles[int((idx / len(l_styles)) % len(l_styles))]
c20f60
 		elif style == 'marker':
c20f60
-			style = m_styles[(idx / len(m_styles)) % len(m_styles)]
c20f60
+			style = m_styles[int((idx / len(m_styles)) % len(m_styles))]
c20f60
 
c20f60
 		return '%s%s' % (color, style)
c20f60
 
c20f60
@@ -314,7 +318,7 @@ def generate_output(type, db):
c20f60
 		ofile = '%s.png' % type
c20f60
 
c20f60
 	if verbose:
c20f60
-		print 'Generating plot into %s' % ofile
c20f60
+		print('Generating plot into %s' % ofile)
c20f60
 
c20f60
 	fig = plt.figure(figsize=plot_size)
c20f60
 	ax = fig.add_subplot(111)
c20f60
@@ -329,7 +333,7 @@ def generate_output(type, db):
c20f60
 		legends = None
c20f60
 
c20f60
 	keys = []
c20f60
-	for file in db.iterkeys():
c20f60
+	for file in six.iterkeys(db):
c20f60
 		if not file in ['min_x', 'max_x', 'min_y', 'max_y']:
c20f60
 			keys.append(file)
c20f60