Содержание страницы
32.13. pickletools – Инструменты для разработчиков pickle¶pickletools – Tools for pickle developers
Исходный код: Lib/pickletools.py
Этот модуль содержит различные константы, касающиеся внутренних деталей модуля
pickle, несколько пространных комментариев о реализации и несколько
полезных функций для анализа данных, сериализованных с помощью pickle. Содержимое этого модуля
может быть полезно разработчикам ядра Python, работающим над pickle;
обычным пользователям модуля pickle модуль pickletools, скорее всего, не нужен.
32.13.1. Использование командной строки¶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
32.13.1.1. Параметры командной строки¶Command line options
-
-a,--annotate¶ Аннотирует каждую строку кратким описанием опкода.
-
-o,--output=<file>¶ Имя файла, в который должна быть записана информация.
-
-l,--indentlevel=<num>¶ Количество пробелов для отступа нового уровня MARK.
-
-m,--memo¶ При дизассемблировании нескольких объектов сохранять memo между сеансами дизассемблирования.
-
-p,--preamble=<preamble>¶ Если указано несколько pickle-файлов, выводить указанную преамбулу перед каждым дизассемблированием.
32.13.2. Программный интерфейс¶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 короче, занимает меньше времени на передачу, требует меньше места при хранении и распаковывается более эффективно.