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, выводить заданный вступительный текст перед каждым дизассемблированием.
Программный интерфейс
-
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–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/library/pickletools.html