106
106
import signal
107
107
import sys
108
108
109
+ from argparse import ArgumentParser
109
110
from collections import defaultdict , namedtuple
110
111
from contextlib import contextmanager
111
112
@@ -484,3 +485,46 @@ def display_by_csv(fp, sort_order):
484
485
row .cum_time_in_proc ,
485
486
row .cum_secs_in_proc ,
486
487
))
488
+
489
+
490
+ def main (args = sys .argv ):
491
+ parser = ArgumentParser ()
492
+ parser .add_argument ('progname' , type = str )
493
+
494
+ formats = {
495
+ 'line' : DisplayFormats .ByLine ,
496
+ 'method' : DisplayFormats .ByMethod ,
497
+ 'csv' : DisplayFormats .CSV ,
498
+ }
499
+ parser .add_argument ('--format' , type = str , choices = formats , default = 'line' )
500
+ parser .add_argument ('--outfile' , type = str , default = None )
501
+
502
+ sorts = {
503
+ 'cum' : SortOrders .ByCumulative ,
504
+ 'self' : SortOrders .BySelf ,
505
+ }
506
+ parser .add_argument ('--sort' , type = str , choices = sorts , default = 'self' )
507
+ parser .add_argument ('--quiet' , action = 'store_true' )
508
+ opts , rest = parser .parse_known_args (args [1 :])
509
+
510
+ sys .path .insert (0 , os .path .dirname (opts .progname ))
511
+ with open (opts .progname , 'rb' ) as fp :
512
+ code = compile (fp .read (), opts .progname , 'exec' )
513
+ globs = {
514
+ '__file__' : opts .progname ,
515
+ '__name__' : '__main__' ,
516
+ '__package__' : None ,
517
+ }
518
+
519
+ if opts .outfile is None :
520
+ outfile = sys .stdout
521
+ else :
522
+ outfile = open (opts .outfile ('w' ))
523
+
524
+ with profile (not opts .quiet , outfile , formats [opts .format ], sorts [opts .sort ]):
525
+ sys .argv = [opts .progname ] + rest
526
+ exec code in globs , None
527
+
528
+
529
+ if __name__ == "__main__" :
530
+ sys .exit (main (sys .argv ))
0 commit comments