summaryrefslogtreecommitdiff
path: root/Lib/profile.py
diff options
context:
space:
mode:
authorNicholas Bastin <nick.bastin@gmail.com>2004-03-23 18:44:39 +0000
committerNicholas Bastin <nick.bastin@gmail.com>2004-03-23 18:44:39 +0000
commit824b1b2da8238b7b71a6135b727ea68d7bc8c5d2 (patch)
tree6c4f481bc7a3dc1cd2ca91dfcb3bf82ee3ad8363 /Lib/profile.py
parent6fca7cc783bfd5696ca3b47022a62fa10b9ab89b (diff)
downloadcpython-git-824b1b2da8238b7b71a6135b727ea68d7bc8c5d2.tar.gz
Added command line options for profile.py - one for stats output file
and one for sort order when using stdout. Uses optparse.
Diffstat (limited to 'Lib/profile.py')
-rwxr-xr-xLib/profile.py40
1 files changed, 27 insertions, 13 deletions
diff --git a/Lib/profile.py b/Lib/profile.py
index 1a4ff67370..2db70b7ea0 100755
--- a/Lib/profile.py
+++ b/Lib/profile.py
@@ -39,6 +39,7 @@ import sys
import os
import time
import marshal
+from optparse import OptionParser
__all__ = ["run","help","Profile"]
@@ -55,7 +56,7 @@ __all__ = ["run","help","Profile"]
# Note that an instance of Profile() is *not* needed to call them.
#**************************************************************************
-def run(statement, filename=None):
+def run(statement, filename=None, sort=-1):
"""Run statement under profiler optionally saving results in filename
This function takes a single argument that can be passed to the
@@ -74,7 +75,7 @@ def run(statement, filename=None):
if filename is not None:
prof.dump_stats(filename)
else:
- return prof.print_stats()
+ return prof.print_stats(sort)
def runctx(statement, globals, locals, filename=None):
"""Run statement under profiler, supplying your own globals and locals,
@@ -384,9 +385,9 @@ class Profile:
self.t = get_time() - t
- def print_stats(self):
+ def print_stats(self, sort=-1):
import pstats
- pstats.Stats(self).strip_dirs().sort_stats(-1). \
+ pstats.Stats(self).strip_dirs().sort_stats(sort). \
print_stats()
def dump_stats(self, file):
@@ -556,15 +557,28 @@ def Stats(*args):
# When invoked as main program, invoke the profiler on a script
if __name__ == '__main__':
+ usage = "profile.py [-o output_file_path] [-s sort] scriptfile [arg] ..."
if not sys.argv[1:]:
- print "usage: profile.py scriptfile [arg] ..."
+ print "Usage: ", usage
sys.exit(2)
- filename = sys.argv[1] # Get script filename
-
- del sys.argv[0] # Hide "profile.py" from argument list
-
- # Insert script directory in front of module search path
- sys.path.insert(0, os.path.dirname(filename))
-
- run('execfile(%r)' % (filename,))
+ class ProfileParser(OptionParser):
+ def __init__(self, usage):
+ OptionParser.__init__(self)
+ self.usage = usage
+
+ parser = ProfileParser(usage)
+ parser.allow_interspersed_args = False
+ parser.add_option('-o', '--outfile', dest="outfile",
+ help="Save stats to <outfile>", default=None)
+ parser.add_option('-s', '--sort', dest="sort",
+ help="Sort order when printing to stdout, based on pstats.Stats class", default=-1)
+
+ (options, args) = parser.parse_args()
+ sys.argv[:] = args
+
+ if (len(sys.argv) > 0):
+ sys.path.insert(0, os.path.dirname(sys.argv[0]))
+ run('execfile(%r)' % (sys.argv[0],), options.outfile, options.sort)
+ else:
+ print "Usage: ", usage