Документация Python неофициальный перевод
Содержание страницы

pickletools – утилиты для разработчиков picklepickletools – Tools for pickle developers

Исходный код: Lib/pickletools.py


Этот модуль содержит различные константы, касающиеся внутренних деталей модуля pickle, несколько пространных комментариев о реализации и несколько полезных функций для анализа данных, сериализованных с помощью pickle. Содержимое этого модуля может быть полезно разработчикам ядра Python, работающим над pickle; обычным пользователям модуля pickle модуль pickletools, скорее всего, не нужен.

Использование командной строкиCommand-line usage

Добавлено в версии 3.2.

При запуске из командной строки python -m pickletools дизассемблирует содержимое одного или нескольких pickle-файлов. Обратите внимание: чтобы увидеть объект Python, хранящийся в pickle, а не детали формата pickle, лучше воспользоваться -m pickle. Однако если файл pickle, который требуется изучить, поступает из ненадёжного источника, -m pickletools является более безопасным вариантом, поскольку не выполняет байткод pickle.

Например, с кортежем (1, 2), сериализованным в файл 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

Параметры командной строкиCommand-line options

-a, --annotate

Аннотирует каждую строку кратким описанием опкода.

-o, --output=<file>

Имя файла, в который должна быть записана информация.

-l, --indentlevel=<num>

Количество пробелов для отступа нового уровня MARK.

-m, --memo

При дизассемблировании нескольких объектов сохранять memo между сеансами дизассемблирования.

-p, --preamble=<preamble>

Когда указано более одного pickle-файла, выводить заданную преамбулу перед каждым дизассемблированием.

pickle_file

Pickle-файл для чтения, или - для указания чтения из стандартного ввода.

Программный интерфейсProgrammatic interface

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

Выводит символьное дизассемблирование pickle в файлоподобный объект out, по умолчанию sys.stdout. pickle может быть строкой или файлоподобным объектом. memo может быть словарём Python, который будет использоваться как memo pickle; его можно использовать для дизассемблирования нескольких pickle-файлов, созданных одним и тем же pickler. Последовательные уровни, обозначенные опкодами MARK в потоке, получают отступ в indentlevel пробелов. Если annotate задано ненулевое значение, каждый опкод в выводе аннотируется кратким описанием. Значение annotate используется как подсказка для столбца, с которого должна начинаться аннотация.

Изменено в версии 3.2: Добавлен параметр annotate.

pickletools.genops(pickle)

Предоставляет итератор по всем опкодам в pickle, возвращая последовательность троек (opcode, arg, pos). opcode – экземпляр класса OpcodeInfo; arg – это декодированное значение (как объект Python) аргумента опкода; pos – позиция, на которой находится этот опкод. pickle может быть строкой или файлоподобным объектом.

pickletools.optimize(picklestring)

Возвращает новую эквивалентную pickle-строку после удаления неиспользуемых опкодов PUT. Оптимизированный pickle короче, занимает меньше времени на передачу, требует меньше места при хранении и распаковывается более эффективно.