pickletools — Herramientas para desarrolladores pickle

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

Nuevo en la versión 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.