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