https://github.com/python/cpython/commit/f9d0531a8d575595b93ca862ad35b8fc573927c1
commit: f9d0531a8d575595b93ca862ad35b8fc573927c1
branch: main
author: donBarbos <donbar...@proton.me>
committer: vstinner <vstin...@python.org>
date: 2025-03-14T14:15:35+01:00
summary:

gh-93096: Update and document `pickle` CLI (#131097)

Co-authored-by: Bénédikt Tran <10796600+picn...@users.noreply.github.com>
Co-authored-by: Victor Stinner <vstin...@python.org>
Co-authored-by: Hugo van Kemenade <1324225+hug...@users.noreply.github.com>

files:
M Doc/library/cmdline.rst
M Doc/library/pickle.rst
M Lib/pickle.py

diff --git a/Doc/library/cmdline.rst b/Doc/library/cmdline.rst
index a000eb21845bac..25abee81e72a73 100644
--- a/Doc/library/cmdline.rst
+++ b/Doc/library/cmdline.rst
@@ -25,7 +25,7 @@ The following modules have a command-line interface.
 * :ref:`json <json-commandline>`
 * :ref:`mimetypes <mimetypes-cli>`
 * :mod:`pdb`
-* :mod:`pickle`
+* :ref:`pickle <pickle-cli>`
 * :ref:`pickletools <pickletools-cli>`
 * :mod:`platform`
 * :mod:`poplib`
diff --git a/Doc/library/pickle.rst b/Doc/library/pickle.rst
index 66aa51ceb84683..007c9fe1b950cf 100644
--- a/Doc/library/pickle.rst
+++ b/Doc/library/pickle.rst
@@ -1210,6 +1210,30 @@ The following example reads the resulting pickled data. 
::
 .. pickletools.optimize() or the gzip module).
 
 
+.. _pickle-cli:
+
+Command-line interface
+----------------------
+
+The :mod:`pickle` module can be invoked as a script from the command line,
+it will display contents of the pickle files. However, when the pickle file
+that you want to examine comes from an untrusted source, ``-m pickletools``
+is a safer option because it does not execute pickle bytecode, see
+:ref:`pickletools CLI usage <pickletools-cli>`.
+
+.. code-block:: bash
+
+   python -m pickle pickle_file [pickle_file ...]
+
+The following option is accepted:
+
+.. program:: pickle
+
+.. option:: pickle_file
+
+   A pickle file to read, or ``-`` to indicate reading from standard input.
+
+
 .. seealso::
 
    Module :mod:`copyreg`
diff --git a/Lib/pickle.py b/Lib/pickle.py
index 8f7406d2534f2c..efcdcbec718166 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -1909,20 +1909,17 @@ def _loads(s, /, *, fix_imports=True, encoding="ASCII", 
errors="strict",
 
 if __name__ == "__main__":
     import argparse
+    import pprint
     parser = argparse.ArgumentParser(
         description='display contents of the pickle files')
     parser.add_argument(
         'pickle_file',
-        nargs='*', help='the pickle file')
+        nargs='+', help='the pickle file')
     args = parser.parse_args()
-    if not args.pickle_file:
-        parser.print_help()
-    else:
-        import pprint
-        for fn in args.pickle_file:
-            if fn == '-':
-                obj = load(sys.stdin.buffer)
-            else:
-                with open(fn, 'rb') as f:
-                    obj = load(f)
-            pprint.pprint(obj)
+    for fn in args.pickle_file:
+        if fn == '-':
+            obj = load(sys.stdin.buffer)
+        else:
+            with open(fn, 'rb') as f:
+                obj = load(f)
+        pprint.pprint(obj)

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to