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