@@ -1253,7 +1253,7 @@ def __init__(self, name, code, arg,
12531253 stack_before = [],
12541254 stack_after = [pyint ],
12551255 proto = 2 ,
1256- doc = """Long integer using found -byte length.
1256+ doc = """Long integer using four -byte length.
12571257
12581258 A more efficient encoding of a Python long; the long4 encoding
12591259 says it all.""" ),
@@ -2848,10 +2848,10 @@ def _test():
28482848 parser = argparse .ArgumentParser (
28492849 description = 'disassemble one or more pickle files' )
28502850 parser .add_argument (
2851- 'pickle_file' , type = argparse . FileType ( 'br' ),
2851+ 'pickle_file' ,
28522852 nargs = '*' , help = 'the pickle file' )
28532853 parser .add_argument (
2854- '-o' , '--output' , default = sys . stdout , type = argparse . FileType ( 'w' ),
2854+ '-o' , '--output' ,
28552855 help = 'the file where the output should be written' )
28562856 parser .add_argument (
28572857 '-m' , '--memo' , action = 'store_true' ,
@@ -2876,15 +2876,26 @@ def _test():
28762876 if args .test :
28772877 _test ()
28782878 else :
2879- annotate = 30 if args .annotate else 0
28802879 if not args .pickle_file :
28812880 parser .print_help ()
2882- elif len (args .pickle_file ) == 1 :
2883- dis (args .pickle_file [0 ], args .output , None ,
2884- args .indentlevel , annotate )
28852881 else :
2882+ annotate = 30 if args .annotate else 0
28862883 memo = {} if args .memo else None
2887- for f in args .pickle_file :
2888- preamble = args .preamble .format (name = f .name )
2889- args .output .write (preamble + '\n ' )
2890- dis (f , args .output , memo , args .indentlevel , annotate )
2884+ if args .output is None :
2885+ output = sys .stdout
2886+ else :
2887+ output = open (args .output , 'w' )
2888+ try :
2889+ for arg in args .pickle_file :
2890+ if len (args .pickle_file ) > 1 :
2891+ name = '<stdin>' if arg == '-' else arg
2892+ preamble = args .preamble .format (name = name )
2893+ output .write (preamble + '\n ' )
2894+ if arg == '-' :
2895+ dis (sys .stdin .buffer , output , memo , args .indentlevel , annotate )
2896+ else :
2897+ with open (arg , 'rb' ) as f :
2898+ dis (f , output , memo , args .indentlevel , annotate )
2899+ finally :
2900+ if output is not sys .stdout :
2901+ output .close ()
0 commit comments