]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-93096: Update and document `pickletools` CLI (#131273)
authorSemyon Moroz <donbarbos@proton.me>
Mon, 17 Mar 2025 09:36:30 +0000 (13:36 +0400)
committerGitHub <noreply@github.com>
Mon, 17 Mar 2025 09:36:30 +0000 (09:36 +0000)
Doc/library/pickletools.rst
Lib/pickletools.py

index e072605974f6c290b527871091dede554891e12e..30fc2962e0bf785292248553ce4f6ae09ecd96c4 100644 (file)
@@ -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,12 +72,16 @@ Command line options
 
 .. option:: -p, --preamble=<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
 
+   A pickle file to read, or ``-`` to indicate reading from standard input.
 
-Programmatic Interface
+
+
+Programmatic interface
 ----------------------
 
 
index 02aad12985dafe49ef129aaebddf59eef9ab4482..53f25ea4e46b4d3a03b0fc476fac12d92d673a6f 100644 (file)
@@ -2845,7 +2845,7 @@ if __name__ == "__main__":
         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 @@ if __name__ == "__main__":
         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 = '<stdin>' 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 = '<stdin>' 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()