17db96d56Sopenharmony_ci:mod:`pickletools` --- Tools for pickle developers
27db96d56Sopenharmony_ci==================================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: pickletools
57db96d56Sopenharmony_ci   :synopsis: Contains extensive comments about the pickle protocols and
67db96d56Sopenharmony_ci              pickle-machine opcodes, as well as some useful functions.
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ci**Source code:** :source:`Lib/pickletools.py`
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci--------------
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ciThis module contains various constants relating to the intimate details of the
147db96d56Sopenharmony_ci:mod:`pickle` module, some lengthy comments about the implementation, and a
157db96d56Sopenharmony_cifew useful functions for analyzing pickled data.  The contents of this module
167db96d56Sopenharmony_ciare useful for Python core developers who are working on the :mod:`pickle`;
177db96d56Sopenharmony_ciordinary users of the :mod:`pickle` module probably won't find the
187db96d56Sopenharmony_ci:mod:`pickletools` module relevant.
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ciCommand line usage
217db96d56Sopenharmony_ci------------------
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ci.. versionadded:: 3.2
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ciWhen invoked from the command line, ``python -m pickletools`` will
267db96d56Sopenharmony_cidisassemble the contents of one or more pickle files.  Note that if
277db96d56Sopenharmony_ciyou want to see the Python object stored in the pickle rather than the
287db96d56Sopenharmony_cidetails of pickle format, you may want to use ``-m pickle`` instead.
297db96d56Sopenharmony_ciHowever, when the pickle file that you want to examine comes from an
307db96d56Sopenharmony_ciuntrusted source, ``-m pickletools`` is a safer option because it does
317db96d56Sopenharmony_cinot execute pickle bytecode.
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ciFor example, with a tuple ``(1, 2)`` pickled in file ``x.pickle``:
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ci.. code-block:: shell-session
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ci    $ python -m pickle x.pickle
387db96d56Sopenharmony_ci    (1, 2)
397db96d56Sopenharmony_ci
407db96d56Sopenharmony_ci    $ python -m pickletools x.pickle
417db96d56Sopenharmony_ci        0: \x80 PROTO      3
427db96d56Sopenharmony_ci        2: K    BININT1    1
437db96d56Sopenharmony_ci        4: K    BININT1    2
447db96d56Sopenharmony_ci        6: \x86 TUPLE2
457db96d56Sopenharmony_ci        7: q    BINPUT     0
467db96d56Sopenharmony_ci        9: .    STOP
477db96d56Sopenharmony_ci    highest protocol among opcodes = 2
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ciCommand line options
507db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ci.. program:: pickletools
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ci.. cmdoption:: -a, --annotate
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci   Annotate each line with a short opcode description.
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci.. cmdoption:: -o, --output=<file>
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ci   Name of a file where the output should be written.
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci.. cmdoption:: -l, --indentlevel=<num>
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci   The number of blanks by which to indent a new MARK level.
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_ci.. cmdoption:: -m, --memo
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci   When multiple objects are disassembled, preserve memo between
697db96d56Sopenharmony_ci   disassemblies.
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci.. cmdoption:: -p, --preamble=<preamble>
727db96d56Sopenharmony_ci
737db96d56Sopenharmony_ci   When more than one pickle file are specified, print given preamble
747db96d56Sopenharmony_ci   before each disassembly.
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ciProgrammatic Interface
797db96d56Sopenharmony_ci----------------------
807db96d56Sopenharmony_ci
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ci.. function:: dis(pickle, out=None, memo=None, indentlevel=4, annotate=0)
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci   Outputs a symbolic disassembly of the pickle to the file-like
857db96d56Sopenharmony_ci   object *out*, defaulting to ``sys.stdout``.  *pickle* can be a
867db96d56Sopenharmony_ci   string or a file-like object.  *memo* can be a Python dictionary
877db96d56Sopenharmony_ci   that will be used as the pickle's memo; it can be used to perform
887db96d56Sopenharmony_ci   disassemblies across multiple pickles created by the same
897db96d56Sopenharmony_ci   pickler. Successive levels, indicated by ``MARK`` opcodes in the
907db96d56Sopenharmony_ci   stream, are indented by *indentlevel* spaces.  If a nonzero value
917db96d56Sopenharmony_ci   is given to *annotate*, each opcode in the output is annotated with
927db96d56Sopenharmony_ci   a short description.  The value of *annotate* is used as a hint for
937db96d56Sopenharmony_ci   the column where annotation should start.
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci   .. versionadded:: 3.2
967db96d56Sopenharmony_ci      The *annotate* argument.
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ci.. function:: genops(pickle)
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci   Provides an :term:`iterator` over all of the opcodes in a pickle, returning a
1017db96d56Sopenharmony_ci   sequence of ``(opcode, arg, pos)`` triples.  *opcode* is an instance of an
1027db96d56Sopenharmony_ci   :class:`OpcodeInfo` class; *arg* is the decoded value, as a Python object, of
1037db96d56Sopenharmony_ci   the opcode's argument; *pos* is the position at which this opcode is located.
1047db96d56Sopenharmony_ci   *pickle* can be a string or a file-like object.
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ci.. function:: optimize(picklestring)
1077db96d56Sopenharmony_ci
1087db96d56Sopenharmony_ci   Returns a new equivalent pickle string after eliminating unused ``PUT``
1097db96d56Sopenharmony_ci   opcodes. The optimized pickle is shorter, takes less transmission time,
1107db96d56Sopenharmony_ci   requires less storage space, and unpickles more efficiently.
111