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
кодов операций. Оптимизированный рассол короче, занимает меньше времени при передаче, занимает меньше места для хранения и более эффективно распаковывается.