From 60c762b77a87438691c1a788f0f427eb666e106b Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Sat, 3 Jul 2010 20:35:53 +0000 Subject: [PATCH] Issue #9094: Make python -m pickletools disassemble pickles given in the command line. --- Lib/pickletools.py | 41 ++++++++++++++++++++++++++++++++++++++++- Misc/NEWS | 4 ++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/Lib/pickletools.py b/Lib/pickletools.py index 6ab75c7ab77..7c4f9f948a9 100644 --- a/Lib/pickletools.py +++ b/Lib/pickletools.py @@ -2330,4 +2330,43 @@ def _test(): return doctest.testmod() if __name__ == "__main__": - _test() + import sys, argparse + parser = argparse.ArgumentParser( + description='disassemble one or more pickle files') + parser.add_argument( + 'pickle_file', type=argparse.FileType('br'), + nargs='*', help='the pickle file') + parser.add_argument( + '-o', '--output', default=sys.stdout, type=argparse.FileType('w'), + help='the file where the output should be written') + parser.add_argument( + '-m', '--memo', action='store_true', + help='preserve memo between disassemblies') + parser.add_argument( + '-l', '--indentlevel', default=4, type=int, + help='the number of blanks by which to indent a new MARK level') + parser.add_argument( + '-p', '--preamble', default="==> {name} <==", + help='if more than one pickle file is specified, print this before' + ' each disassembly') + parser.add_argument( + '-t', '--test', action='store_true', + help='run self-test suite') + parser.add_argument( + '-v', action='store_true', + help='run verbosely; only affects self-test run') + args = parser.parse_args() + if args.test: + _test() + else: + if not args.pickle_file: + parser.print_help() + elif len(args.pickle_file) == 1: + dis(args.pickle_file[0], args.output, + indentlevel=args.indentlevel) + else: + memo = {} if args.memo else None + for f in args.pickle_file: + preamble = args.preamble.format(name=f.name) + args.output.write(preamble + '\n') + dis(f, args.output, memo, args.indentlevel) diff --git a/Misc/NEWS b/Misc/NEWS index 3b2ff32dcf3..091deabcac4 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -468,6 +468,10 @@ C-API Library ------- +- Issue #9094: python -m pickletools will now disassemble pickle files + listed in the command line arguments. See output of python -m + pickletools -h for more details. + - Issue #5468: urlencode to handle bytes type and other encodings in its query parameter. Patch by Dan Mahn.