Содержание страницы
32.13. pickletools – Инструменты для разработчиков pickle¶pickletools – Tools for pickle developers
Исходный код: Lib/pickletools.py
Этот модуль содержит различные константы, связанные с внутренними деталями модуля pickle, несколько пространных комментариев о реализации и несколько полезных функций для анализа pickled-данных. Содержимое этого модуля полезно для разработчиков ядра 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, который будет использоваться как мемо 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 короче, требует меньше времени на передачу, меньше места для хранения и распаковывается быстрее.