pickletools — Инструменты для разработчиков pickle
Исходный код: Lib/pickletools.py
Этот модуль содержит различные константы, относящиеся к деталям модуля pickle, некоторые подробные комментарии об реализации и несколько полезных функций для анализа закодированных данных. Содержание этого модуля полезно для разработчиков Python, работающих над pickle; обычным пользователям модуля pickle модуль pickletools скорее всего, не пригодится.
32.13.1. Использование в командной строке
Новое в версии 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
32.13.1.1. Параметры командной строки
-
-a, --annotate -
Добавить к каждой строке краткое описание кода операции.
-
-o, --output=<file> -
Имя файла, в который будет записан вывод.
-
-l, --indentlevel=<num> -
Количество пробелов для отступа нового уровня MARK.
-
-m, --memo -
При разборе нескольких объектов сохранять запоминание между разборами.
-
-p, --preamble=<preamble> -
При указании нескольких файлов pickle печатать задаваемое вступление перед каждым разбором.
32.13.2. Программный интерфейс
-
pickletools.dis(pickle, out=None, memo=None, indentlevel=4, annotate=0) -
Выводит символическое развёртывание pickle в объект файла out, по умолчанию
sys.stdout. pickle может быть строкой или объектом файла. memo может быть словарем Python, который будет использоваться в качестве запоминания pickle; он может быть использован для разбора нескольких pickle, созданных тем же pickler-ом. Уровни, указанные кодами операций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–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.6/library/pickletools.html