#!/usr/bin/env python3 import sys from typing import List def prof_main(argv: List[str]) -> int: import hotshot.stats # type: ignore[import] def usage() -> int: print("usage: %s module.function [args ...]" % argv[0]) return 100 args = argv[1:] if len(args) < 1: return usage() name = args.pop(0) prof = name + ".prof" i = name.rindex(".") (modname, funcname) = (name[:i], name[i + 1 :]) # Type error: fromlist expects sequence of strings; presumably the intent # is to retrieve the named module rather than a top-level package (as in # "when a non-empty fromlist argument is given..."). module = __import__(modname, fromlist=1) # type: ignore[arg-type] func = getattr(module, funcname) if args: args.insert(0, argv[0]) profile = hotshot.Profile(prof) profile.runcall(lambda: func(args)) profile.close() else: stats = hotshot.stats.load(prof) stats.strip_dirs() stats.sort_stats("time", "calls") stats.print_stats(1000) return 0 if __name__ == "__main__": sys.exit(prof_main(sys.argv))