Spec-Zone.ru › Python 3.14

pickletools — Инструменты для разработчиков pickle

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

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

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

Добавлено в версии 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

Параметры командной строки

-a, --annotate

Добавлять к каждой строке краткое описание кода операции.

-o, --output=<file>

Имя файла, в который следует записать результат.

-l, --indentlevel=<num>

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

-m, --memo

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

-p, --preamble=<preamble>

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

pickle_file

Файл pickle для чтения или - для чтения из стандартного ввода.

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

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

Выводит символьную дизассемблированную запись pickle в файловоподобный объект out, по умолчанию — в sys.stdout. В качестве pickle можно передать строку или файловоподобный объект. memo может быть словарём Python, который будет использоваться как memo для pickle; его можно применять для дизассемблирования нескольких pickle, созданных одним и тем же сериализатором. Последовательные уровни, обозначенные кодами операций 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 короче, требует меньше времени на передачу и меньше места для хранения, а также эффективнее десериализуется.

© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/pickletools.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API