diff --git a/Tools/PyUtils/bin/dso-stats.py b/Tools/PyUtils/bin/dso-stats.py
index 41ede670c3a25e72dbeb40c18adbd966cc8f94b8..1b9883314af3231541d5b5dd74262ea03e4e8a5e 100755
--- a/Tools/PyUtils/bin/dso-stats.py
+++ b/Tools/PyUtils/bin/dso-stats.py
@@ -12,23 +12,6 @@ import re
 import sys
 import os
 import subprocess
-import six
-
-## monkey patch subprocess to be forward compatible with py-3k
-def getstatusoutput(cmd):
-    if isinstance(cmd, str):
-        cmd = cmd.split()
-    if not isinstance(cmd, (list, tuple)):
-        raise TypeError('expects a list, a tuple or a space separated string')
-    encargs = {} if six.PY2 else {'encoding' : 'utf-8'}
-    process = subprocess.Popen(cmd,
-                               stdout=subprocess.PIPE,
-                               stderr=subprocess.STDOUT,
-                               **encargs)
-    stdout, _ = process.communicate()
-    return process.returncode, stdout
-subprocess.getstatusoutput = getstatusoutput
-del getstatusoutput
 
 def getstatus(cmd):
     sc,_ = subprocess.getstatusoutput(cmd)
@@ -98,7 +81,7 @@ class Data:
 
         self.ro = 0
         self.rw = 0
-        
+
         if secs:
             self.add_secs (secs)
             self.est_frag()
@@ -157,7 +140,7 @@ class Data:
                 self.cpp += sz
                 self.rw += sz
 
-                
+
             elif s in ['.jcr']:
                 self.java += sz
                 self.rw += sz
@@ -196,51 +179,46 @@ class Data:
         kw['bss'] = _form (self.bss)
         kw['total'] = _form (self.total())
         print (format % kw, file=f)
-        
-
-# secs = parse_lib (lib)
-# data = Data(secs, name = lib)
-# print data.dso, data.code, data.puredata, data.cpp, data.java, data.initdata, data.bss
-# print data.ro, data.rw, data.frag
-
-# data2 = Data(secs)
-# data += data2
-# print data.dso, data.code, data.puredata, data.cpp, data.java, data.initdata, data.bss
-# print data.ro, data.rw, data.frag
-
-
-
-# data.dump (sys.stdout)
-
-
-kw = {'name' : 'Name',
-      'dso'  : 'DSO',
-      'code' : 'Code',
-      'puredata': 'Pure',
-      'cpp'  : 'C++',
-      'java' : 'Java',
-      'initdata': 'data',
-      'bss'  : 'BSS',
-      'frag' : 'Frag',
-      'total': 'Total'}
-print (format % kw, file=sys.stdout)
-
-
-total = Data(name = 'Total')
-import fileinput
-libs = []
-for l in fileinput.input():
-    if l[-1] == '\n':
-        l = l[:-1]
-    if l[-1] == '*':
-        l = l[:-1]
-    secs = parse_lib(l)
-    data = Data (secs, name = l)
-    libs.append (data)
-    total += data
-
-libs.sort (key = lambda x: x.total(), reverse=True)
-
-for l in libs:
-    l.dump (sys.stdout)
-total.dump (sys.stdout)
+
+def main():
+
+   import optparse
+   parser = optparse.OptionParser(description="compile size statistics for shared libraries",
+                                              usage="%prog LIB [LIB...]")
+
+   (opt, args) = parser.parse_args()
+   if len(args)==0:
+        parser.error("Invalid number of arguments specified")
+
+   libs = []
+   total = Data(name = 'Total')
+   for lib in args:
+        secs = parse_lib(lib)
+        data = Data (secs, name = lib)
+        libs.append (data)
+        total += data
+   libs.sort (key = lambda x: x.total(), reverse=True)
+   kw = {'name' : 'Name',
+         'dso'  : 'DSO',
+         'code' : 'Code',
+         'puredata': 'Pure',
+         'cpp'  : 'C++',
+         'java' : 'Java',
+         'initdata': 'data',
+         'bss'  : 'BSS',
+         'frag' : 'Frag',
+         'total': 'Total'}
+   print (format % kw, file=sys.stdout)
+   for l in libs:
+        l.dump (sys.stdout)
+   total.dump (sys.stdout)
+
+   return 0
+
+
+if __name__ == "__main__":
+   try:
+        sys.exit(main())
+   except KeyboardInterrupt:
+        sys.exit(1)
+