pickletools
— Инструменты для pickle разработчиков¶
Исходный код: Lib/pickletools.py
Модуль содержит различные константы, относящиеся к четким деталям модуля
pickle
, некоторые подробные комментарии о реализации и несколько полезных
функций для анализа pickled данных. Содержание этого модуля полезно для
разработчиков ядра Python, которые работают над pickle
; обычные
пользователи модуля pickle
, вероятно, не найдут модуль pickletools
релевантным.
Использование командной строки¶
Добавлено в версии 3.2.
При вызове из командной строки, python -m pickletools
разбирает содержимое одного или
нескольких pickle файлов. Обратите внимание, что для просмотра объекта
Python, хранящегося в pickle, а не подробных данных формата
pickle, вместо него может потребоваться использовать -m pickle
. Однако,
когда файл pickle, который вы хотите исследовать, прибывает из источника,
которому не доверяют, -m pickletools
- более безопасный выбор, потому что он не
выполняет байткод pickle.
Например, с кортежем (1, 2)
pickled в файле 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, который будет используемый как памятка 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 короче, занимает меньше времени передачи, требует меньшего количества места для хранения и unpickles более эффективно.