# `pickletools` — Tools for pickle developers

Código fuente: Lib/pickletools.py

Este módulo contiene varias constantes relacionadas con los detalles íntimos del módulo `pickle`, algunos comentarios largos sobre la implementación y algunas funciones útiles para analizar pickled data. El contenido de este módulo es útil para los desarrolladores principales de Python que están trabajando en el `pickle`; los usuarios ordinarios del módulo `pickle` probablemente no encontrarán relevante el módulo `pickletools`.

## Uso de la línea de comandos

Added in version 3.2.

Cuando se invoca desde la línea de comandos, `python -m pickletools` desensamblará el contenido de uno o más archivos pickle. Tenga en cuenta que si desea ver el objeto Python almacenado en el pickle en lugar de los detalles del formato de pickle, es posible que desee utilizar `-m pickle` en su lugar. Sin embargo, cuando el archivo de pickle que desea examinar proviene de una fuente que no es de confianza, `-m pickletools` es una opción más segura porque no ejecuta el código de bytes de pickle.

Por ejemplo, con una tupla `(1, 2)` pickled en el archivo `x.pickle`:

    $ python -m pickle x.pickle
    (1, 2)

    $ python -m pickletools x.pickle
        0: \x80 PROTO      3
        2: K    BININT1    1
        4: K    BININT1    2
        6: \x86 TUPLE2
        7: q    BINPUT     0
        9: .    STOP
    highest protocol among opcodes = 2

### Opciones de línea de comandos

-a, --annotate

  Anote cada línea con una breve descripción del código de operación.

-o, --output=<file>

  Nombre de un archivo donde se debe escribir la salida.

-l, --indentlevel=<num>

  Número de espacios en blanco por los que se aplica una sangría a un nuevo nivel de MARK.

-m, --memo

  Cuando se desensamblan varios objetos, conserve la nota entre los ensamblajes.

-p, --preamble=<preamble>

  Cuando se especifica más de un archivo pickle, imprima un preámbulo determinado antes de cada desensamblado.

## Interfaz programática

pickletools.dis(pickle, out=None, memo=None, indentlevel=4, annotate=0)

  Produce un desensamblado simbólico del pickle en el objeto similar a un archivo salida, de forma predeterminada en `sys.stdout`. pickle puede ser una cadena o un objeto similar a un archivo. memo puede ser un diccionario Python que se utilizará como nota del pickle; se puede utilizar para realizar ensamblajes de desuso en varios pickles creados por el mismo selector. Los niveles sucesivos, indicados por los códigos de operación `MARK` en la secuencia, son indentados por espacios indentlevel. Si se da un valor distinto de cero a anotar, cada código de operación de la salida se anota con una breve descripción. El valor de anotar se utiliza como sugerencia para la columna donde debe comenzar la anotación.

  Distinto en la versión 3.2: Added the annotate parameter.

pickletools.genops(pickle)

  Proporciona un iterator sobre todos los códigos de operación en un pickle, retornando una secuencia de triples `(opcode, arg, pos)`. opcode es una instancia de una clase `OpcodeInfo`; arg es el valor descodificado, como un objeto Python, del argumento del código de operación; pos es la posición en la que se encuentra este código de operación. pickle puede ser una cadena o un objeto similar a un archivo.

pickletools.optimize(picklestring)

  Retorna una nueva cadena pickle equivalente después de eliminar los códigos de operación `PUT` no utilizados. El pickle optimizado es más corto, toma menos tiempo de transmisión, requiere menos espacio de almacenamiento y se restaura de manera más eficiente.