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