pickletools
— Инструменты для pickle разработчиков¶
Данный модуль содержит различные константы, относящиеся к интимным деталям
модуля pickle
, несколько пространных комментариев о реализации и
несколько полезных функций для анализа обработанных данных. Содержимое данного
модуля полезно для разработчиков ядра Python, которые работают над
pickle
; обычные пользователи модуля pickle
, вероятно, не
посчитают модуль pickletools
актуальным.
Использование командной строки¶
Добавлено в версии 3.2.
При вызове из командной строки python -m pickletools
дизассемблирует
содержимое одного или нескольких пикл файлов. Обратите внимание: если вы
хотите увидеть хранящийся в пикле Python объект, а не подробности пикл
формата, вы можете вместо него использовать -m 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
¶
При дизассемблировании нескольких объектов сохраняйте памятку между дизассемблированием.
-
-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)¶ Предоставляет итератор для всех кодов операций в пикле, возвращая последовательность троек
(opcode, arg, pos)
. opcode — экземпляр классаOpcodeInfo
; arg — это декодированное значение аргумента кода операции в виде объекта Python; pos — это позиция, в которой находится данный код операции. pickle может быть строкой или файловым объектом.
-
pickletools.
optimize
(picklestring)¶ Возвращает новую эквивалентную строку пикла после исключения неиспользуемых кодов операций
PUT
. Оптимизированные пикли короче, занимают меньше времени на передачу, требуют меньше места для хранения и более эффективно распаковываются.