@@ -2330,4 +2330,43 @@ def _test():
23302330 return doctest .testmod ()
23312331
23322332if __name__ == "__main__" :
2333- _test ()
2333+ import sys , argparse
2334+ parser = argparse .ArgumentParser (
2335+ description = 'disassemble one or more pickle files' )
2336+ parser .add_argument (
2337+ 'pickle_file' , type = argparse .FileType ('br' ),
2338+ nargs = '*' , help = 'the pickle file' )
2339+ parser .add_argument (
2340+ '-o' , '--output' , default = sys .stdout , type = argparse .FileType ('w' ),
2341+ help = 'the file where the output should be written' )
2342+ parser .add_argument (
2343+ '-m' , '--memo' , action = 'store_true' ,
2344+ help = 'preserve memo between disassemblies' )
2345+ parser .add_argument (
2346+ '-l' , '--indentlevel' , default = 4 , type = int ,
2347+ help = 'the number of blanks by which to indent a new MARK level' )
2348+ parser .add_argument (
2349+ '-p' , '--preamble' , default = "==> {name} <==" ,
2350+ help = 'if more than one pickle file is specified, print this before'
2351+ ' each disassembly' )
2352+ parser .add_argument (
2353+ '-t' , '--test' , action = 'store_true' ,
2354+ help = 'run self-test suite' )
2355+ parser .add_argument (
2356+ '-v' , action = 'store_true' ,
2357+ help = 'run verbosely; only affects self-test run' )
2358+ args = parser .parse_args ()
2359+ if args .test :
2360+ _test ()
2361+ else :
2362+ if not args .pickle_file :
2363+ parser .print_help ()
2364+ elif len (args .pickle_file ) == 1 :
2365+ dis (args .pickle_file [0 ], args .output ,
2366+ indentlevel = args .indentlevel )
2367+ else :
2368+ memo = {} if args .memo else None
2369+ for f in args .pickle_file :
2370+ preamble = args .preamble .format (name = f .name )
2371+ args .output .write (preamble + '\n ' )
2372+ dis (f , args .output , memo , args .indentlevel )
0 commit comments