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


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

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

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

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

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

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

-p, --preamble=<preamble>

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

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

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

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