diff options
author | Skip Montanaro <skip@pobox.com> | 2004-01-26 19:44:48 (GMT) |
---|---|---|
committer | Skip Montanaro <skip@pobox.com> | 2004-01-26 19:44:48 (GMT) |
commit | 4aba6f51cb5af7952ee2ff320a08c804545e3220 (patch) | |
tree | 6255f5c1c0a8895d746dc69dc68ffb9a552853a6 /Tools/scripts | |
parent | ee3c6074c37175f1bee473f055cdcc93be3bf6ec (diff) | |
download | cpython-4aba6f51cb5af7952ee2ff320a08c804545e3220.zip cpython-4aba6f51cb5af7952ee2ff320a08c804545e3220.tar.gz cpython-4aba6f51cb5af7952ee2ff320a08c804545e3220.tar.bz2 |
The bagpipe didn't say "no" (*), so here's a main program script useful for
running an application under hotshot's control. Only slightly embellished
from what Walter Dörwald posted to python-dev.
(*) http://www.icdc.com/~roadkill/silverstein/turtle.html
Diffstat (limited to 'Tools/scripts')
-rw-r--r-- | Tools/scripts/hotshotmain.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/Tools/scripts/hotshotmain.py b/Tools/scripts/hotshotmain.py new file mode 100644 index 0000000..0912056 --- /dev/null +++ b/Tools/scripts/hotshotmain.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-1 -*- + +""" +Run a Python script under hotshot's control. + +Adapted from a posting on python-dev by Walter Dörwald + +usage %prog [ %prog args ] filename [ filename args ] + +Any arguments after the filename are used as sys.argv for the filename. +""" + +import sys +import optparse +import os +import hotshot +import hotshot.stats + +PROFILE = "hotshot.prof" + +def run_hotshot(filename, profile, args): + prof = hotshot.Profile(profile) + sys.path.insert(0, os.path.dirname(filename)) + sys.argv = [filename] + args + prof.run("execfile(%r)" % filename) + prof.close() + stats = hotshot.stats.load(profile) + stats.sort_stats("time", "calls") + + # print_stats uses unadorned print statements, so the only way + # to force output to stderr is to reassign sys.stdout temporarily + save_stdout = sys.stdout + sys.stdout = sys.stderr + stats.print_stats() + sys.stdout = save_stdout + + return 0 + +def main(args): + parser = optparse.OptionParser(__doc__) + parser.add_option("-p", "--profile", action="store", default=PROFILE, + dest="profile", help='Specify profile file to use') + (options, args) = parser.parse_args(args) + + if len(args) == 0: + parser.print_help("missing script to execute") + return 1 + + filename = args[0] + return run_hotshot(filename, options.profile, args[1:]) + +if __name__ == "__main__": + sys.exit(main(sys.argv[1:])) |