From 8de9742542ba9538adac0e1b88e0e88358108de5 Mon Sep 17 00:00:00 2001 From: donBarbos Date: Sat, 15 Mar 2025 11:35:54 +0400 Subject: [PATCH 1/2] Update and document `pickletools` CLI --- Doc/library/pickletools.rst | 4 ++++ Lib/pickletools.py | 43 +++++++++++++++++-------------------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/Doc/library/pickletools.rst b/Doc/library/pickletools.rst index e072605974f6c2..3196541b2c067a 100644 --- a/Doc/library/pickletools.rst +++ b/Doc/library/pickletools.rst @@ -75,6 +75,10 @@ Command line options When more than one pickle file are specified, print given preamble before each disassembly. +.. option:: pickle_file + + A pickle file to read, or ``-`` to indicate reading from standard input. + Programmatic Interface diff --git a/Lib/pickletools.py b/Lib/pickletools.py index 02aad12985dafe..53f25ea4e46b4d 100644 --- a/Lib/pickletools.py +++ b/Lib/pickletools.py @@ -2845,7 +2845,7 @@ def __init__(self, value): description='disassemble one or more pickle files') parser.add_argument( 'pickle_file', - nargs='*', help='the pickle file') + nargs='+', help='the pickle file') parser.add_argument( '-o', '--output', help='the file where the output should be written') @@ -2863,26 +2863,23 @@ def __init__(self, value): help='if more than one pickle file is specified, print this before' ' each disassembly') args = parser.parse_args() - if not args.pickle_file: - parser.print_help() + annotate = 30 if args.annotate else 0 + memo = {} if args.memo else None + if args.output is None: + output = sys.stdout else: - annotate = 30 if args.annotate else 0 - memo = {} if args.memo else None - if args.output is None: - output = sys.stdout - else: - output = open(args.output, 'w') - try: - for arg in args.pickle_file: - if len(args.pickle_file) > 1: - name = '' if arg == '-' else arg - preamble = args.preamble.format(name=name) - output.write(preamble + '\n') - if arg == '-': - dis(sys.stdin.buffer, output, memo, args.indentlevel, annotate) - else: - with open(arg, 'rb') as f: - dis(f, output, memo, args.indentlevel, annotate) - finally: - if output is not sys.stdout: - output.close() + output = open(args.output, 'w') + try: + for arg in args.pickle_file: + if len(args.pickle_file) > 1: + name = '' if arg == '-' else arg + preamble = args.preamble.format(name=name) + output.write(preamble + '\n') + if arg == '-': + dis(sys.stdin.buffer, output, memo, args.indentlevel, annotate) + else: + with open(arg, 'rb') as f: + dis(f, output, memo, args.indentlevel, annotate) + finally: + if output is not sys.stdout: + output.close() From 0cda72705378e2a132dea7350ed1dfbdb7285e79 Mon Sep 17 00:00:00 2001 From: donBarbos Date: Mon, 17 Mar 2025 13:08:54 +0400 Subject: [PATCH 2/2] Update Doc/library/pickletools.rst --- Doc/library/pickletools.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Doc/library/pickletools.rst b/Doc/library/pickletools.rst index 3196541b2c067a..30fc2962e0bf78 100644 --- a/Doc/library/pickletools.rst +++ b/Doc/library/pickletools.rst @@ -19,7 +19,7 @@ ordinary users of the :mod:`pickle` module probably won't find the .. _pickletools-cli: -Command line usage +Command-line usage ------------------ .. versionadded:: 3.2 @@ -48,7 +48,7 @@ For example, with a tuple ``(1, 2)`` pickled in file ``x.pickle``: 9: . STOP highest protocol among opcodes = 2 -Command line options +Command-line options ^^^^^^^^^^^^^^^^^^^^ .. program:: pickletools @@ -72,7 +72,7 @@ Command line options .. option:: -p, --preamble= - When more than one pickle file are specified, print given preamble + When more than one pickle file is specified, print given preamble before each disassembly. .. option:: pickle_file @@ -81,7 +81,7 @@ Command line options -Programmatic Interface +Programmatic interface ----------------------