summaryrefslogtreecommitdiffstats
path: root/Tools
diff options
context:
space:
mode:
authorSkip Montanaro <skip@pobox.com>2004-01-26 19:44:48 (GMT)
committerSkip Montanaro <skip@pobox.com>2004-01-26 19:44:48 (GMT)
commit4aba6f51cb5af7952ee2ff320a08c804545e3220 (patch)
tree6255f5c1c0a8895d746dc69dc68ffb9a552853a6 /Tools
parentee3c6074c37175f1bee473f055cdcc93be3bf6ec (diff)
downloadcpython-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')
-rw-r--r--Tools/scripts/hotshotmain.py54
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:]))