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>

Количество пробелов, на которое нужно сделать отступ для нового уровня отметки.

-m, --memo

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

-p, --preamble=<preamble>

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

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

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

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

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

pickletools.genops(pickle)

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

pickletools.optimize(picklestring)

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

Вернуться на верх